Tha*_*ish 9 spring jmock junit4
我有一个看起来像的测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class TestClass {
@Rule @Resource public JUnitRuleMockery jMockContext;
public void test1() {
//Expectations and test
}
public void test2() {
//Expectations and test
}
}
Run Code Online (Sandbox Code Playgroud)
在test-context.xml我JUnitRuleMockery通过a 定义加上几个模拟对象factory-method,就像
<bean id="mockContextFactory" class="MockContextFactory" />
<bean id="jMockContext" factory-bean="mockContextFactory" factory-method="getContext" scope="prototype" />
<bean id="firstMock" factory-bean="mockContextFactory" factory-method="getFirstMock" />
<bean id="secondMock" factory-bean="mockContextFactory" factory-method="getSecondMock" />
Run Code Online (Sandbox Code Playgroud)
MockContextFactory 是
public class MockContextFactory
{
private JUnitRuleMockery jUnitRuleMockery;
public MockContextFactory() {
jUnitRuleMockery = new JUnitRuleMockery();
jUnitRuleMockery.setThreadingPolicy(new Synchroniser());
}
public JUnitRuleMockery getContext() {
return jUnitRuleMockery;
}
public FirstMock getFirstMock() {
return jUnitRuleMockery.mock(FirstMock.class);
}
//others getter
}
Run Code Online (Sandbox Code Playgroud)
在TestClass我有几个测试方法,并且由于注释@DirtiesContext,我期望在每次测试执行后重新加载Spring上下文(因为每个测试设置对模拟对象的期望,我必须每次都重新加载Spring上下文).从这里查看@DirtiesContext.但是,看起来Spring上下文没有被重新加载:实际上,在开始时进入调试模式test2(据说test1早先已经执行过)我可以看到jMockContext仍然保持期望,执行列表和错误(如果有的话)test1.
那么,最后几个问题,@DirtiesContext确实会导致重新加载Spring上下文(正如我从Spring Docs中理解的那样)或者我是否误解了注释?在第一种情况下,我做错了什么?在后一种情况下,如何为每次测试强制重新加载Spring上下文?
编辑,以划分问题:我有一个像上面的示例代码运行几天,然后今天我创建了一个新的测试,其中我添加了一个失败的期望.然后,我看到班级中的所有其他测试都因为同样的原因失败了(green直到今天它们都在那里).调试,我发现它jMockContext从未被清除,这意味着所有测试都在同一个池中增加了期望:当然,只要没有期望失败,这是透明的,我没有注意到它(test1添加并传递很少的期望,test2需要一个非空的期望值已经通过并增加了它自己,所以没有问题),但我不喜欢以前的情况,我想开始每个测试,没有先前设定的期望.
Tha*_*ish 19
这是我的解决方案.我不知道这是否仅限于Spring 3.2,或者它是否是一般的误解,但仅仅使用@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)不足以导致为每个测试重新加载整个Spring上下文.我只好也加入DirtiesContextTestExecutionListener在@TestExecutionListeners.
那么,到底有什么工作对我来说只是改变我的注释TestClass来
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@TestExecutionListeners({DirtiesContextTestExecutionListener.class})
public abstract class TestClass
Run Code Online (Sandbox Code Playgroud)
没有什么必须改变.
| 归档时间: |
|
| 查看次数: |
13091 次 |
| 最近记录: |