我正在为Bean编写一个单元测试,它具有一些使用spring自动装配的属性。
这是豆子:
public class Goober {
@Autowired
private ObjectX prop1;
@Autowired
private ObjectY prop2;
//... rest of object
}
在我的单元测试中,我想使用jmockit模拟prop1,但是在春天注入了prop2。以下是我的测试结果:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/applicationContext-test.xml" })
public class GooberUT extends TestCase{
@Tested @Autowired
Goober goober;
@Test
public void gooberTest (@Injectable prop1) {
// .. test and whatnot here
}
// .. setup/teardown etc
}
这里的问题是prop1将由spring自动装配。如果我从测试中删除@Autowired注释,那么prop1将被模拟,但prop2将为null。
如何使用jMockit在Goober中注入一个属性,另一个使用Autowire?
答案 0 :(得分:1)
你可以让Spring注入prop1,然后用ReflectionTestUtils'覆盖prop1值。 setProperty方法并以编程方式注入您喜欢的任何内容。
答案 1 :(得分:1)
如果ObjectY
是一个类而不是一个接口,则可以使用以下测试类:
public class GooberUT
{
@Tested(fullyInitialized = true)
Goober goober;
@Test
public void gooberTest(@Injectable ObjectX prop1)
{
// .. test and whatnot here
}
// .. setup/teardown etc
}
使用@Tested(fullyInitialized = true)
,JMockit将以递归方式实例化并注入测试对象中的所有字段。但是,匹配@Injectable
的字段将接收模拟实例。