我按照JBoss 文档创建了一个拦截器。
为了测试拦截器,我放了:
@Interceptor
@Transactional
public class TransactionalInterceptor {
@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception {
System.out.println("intercept!");
return ctx.proceed();
}
}
现在我想使用WeldJUnit4Runner 类在单元测试中测试这个拦截器。
@RunWith(WeldJUnit4Runner.class)
public class MyTest {
@Test
@Transactional // the interceptor I created
public void testMethod() {
System.out.println("testMethod");
anotherMethod();
}
@Transactional
public void anotherMethod() {
System.out.println("anotherMethod");
}
}
现在预期的输出当然是
intercept!
testMethod
intercept!
anotherMethod
但相反,输出是
intercept!
testMethod
anotherMethod
主要问题是,如果我将 bean 注入到我的测试中,这也是正确的:我调用的 bean 的第一个方法被拦截,但如果此方法调用另一个方法,则不会调用拦截器。
任何想法都非常感谢!
我只是尝试按照@adrobisch 的建议修改我的代码,这很有效:
@RunWith(WeldJUnit4Runner.class)
public class MyTest {
@Inject
private MyTest instance;
@Test
@Transactional // the interceptor I created
public void testMethod() {
System.out.println("testMethod");
instance.anotherMethod();
}
@Transactional
public void anotherMethod() {
System.out.println("anotherMethod");
}
}
输出是(如预期的那样)
intercept!
testMethod
intercept!
anotherMethod
但是,以下方法不起作用:
@RunWith(WeldJUnit4Runner.class)
public class MyTest {
@Inject
private MyTest instance;
@Test
// @Transactional <- no interceptor here!
public void testMethod() {
System.out.println("testMethod");
instance.anotherMethod();
}
@Transactional
public void anotherMethod() {
System.out.println("anotherMethod");
}
}
这里的输出是
testMethod
anotherMethod
但是,这似乎符合规范!现在一切都很好。