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(); } } Quintin Beukes
