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