【发布时间】:2016-11-05 15:51:40
【问题描述】:
我有两个班级:
public MyService {
@Autowired
private MyDao myDao;
private List<Items> list;
@PostConstruct
private void init(){
list = myDao.getItems();
}
}
现在我想让MyService 参与单元测试,因此我将模拟MyDao 的行为。
XML:
<bean class = "com.package.MyService">
<bean class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.MyDao"/>
</bean>
<util:list id="responseItems" value-type="com.package.Item">
<ref bean="item1"/>
<ref bean="item2"/>
</util:list>
单元测试:
@ContextConfiguration("/test-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class MyServiceTest {
@Autowired
MyService myService
@Autowired
MyDao myDao;
@Resource
@Qualifier("responseItems")
private List<Item> responseItems;
@Before
public void setupTests() {
reset(myDao);
when(myDao.getItems()).thenReturn(responseItems);
}
}
这个问题是MyService bean 被创建,它的@PostConstruct bean 在定义模拟行为之前被调用。
如何在 XML 中定义模拟行为或延迟 @PostConstruct 直到单元测试设置之后?
【问题讨论】:
标签: java spring unit-testing mockito postconstruct