On Sep 27, 2009, at 12:16 PM, Quintin Beukes wrote:

Hey,

The previous runner I started modifying extensively to customize for
our company's tests. I already had a small testing framework for the
tests, which used Spring to initial OpenEJB and do the lookups. I
changed this to use the runner technique.

Then over the weekend I decided to extract the runner code into an
openejb-junit project, and make it extensible so I could use the
library's code and only extend to give our tests the same
functionality.

This is what I came up with: https://issues.apache.org/jira/browse/OPENEJB-1078

The JUnit tests demonstrate it's behaviour. These 3 tests are the best examples:
org.apache.openejb.junit.TestEjbBasic
org.apache.openejb.junit.TestEjbSecurity
org.apache.openejb.junit.TestDualConfigOverride

It supports class level configuration of the InitialContext, and then
method specific configurations. You can configure the InitialContext
from a file, or by directly specifying properties. You can have
OpenEJB do any of it's supported injections, or you can have the
runner inject the InitialContext (or it's initialization Properties
object) and do your own lookups. You can specify as which role to load
the InitialContext (basically a RunAs).

I'm planning on doing resource configurations, such as datasources.
Any other suggestions, please throw them my way. And please send me
feedback. So far it's working very well for my tests. I have yet to
complete the spring modification, but for those tests which don't
require it, it works very well. Especially the role tests.

Not that it still doesn't support JUnit 3. If you require JUnit 3, let
me know and I'll prioritize implementing JUnit 3 support.

An basic example would be the following:
@RunWith(OpenEjbRunner.class)
@ContextConfig(
 properties={
@Property ("java .naming .factory .initial=org.apache.openejb.client.LocalInitialContextFactory")
 }
)
@LocalClient
public class TestEjbSecurity
{
 @EJB
 private MyBusinessBean myBean;

 @TestResource
 private InitialContext currentInitialContext;

 @Test
 @ContextConfig(
   securityRole="Admin"
 )
 public void testAsAdmin()
 {
   myBean.someMethod();
   currentInitialContext.lookup("some/custom/lookup");
 }

 @Test
 @ContextConfig(
   propertiesFile="/META-INF/employee-context.properties",
   securityRole="Employe"
 )
 public void testAsEmployee()
 {
   myBean.someMethod();
 }
}

Looks like a great start. For code of this size we'll definitely need a CLA on file - http://apache.org/licenses/#clas

Once we get that on file, we can check this into a branch and hammer on it together. I've been itching to work on this feature for a bit as well, so this will be fun. Have a bunch of ideas around transactions, rerunning tests, and some security stuff too. Haven't had a chance to look too closely at the code you've got, but initial glance seems like it will be a good prototype.

Do you know if TestNG has a similar Test Runner concept?


-David




Reply via email to