我正在使用Junit,EasyMock和Spring编写单元测试用例。我正在尝试模拟DAO层调用。我已经使用注释在我的应用程序中注入bean
服务层类:
public class CustomerService {
@Autowired
private CustomerDao customerDao;
........
public void findCustomerByAccountNumber(String accountNumber){
}
}
服务方法的测试用例:
public class CustomerServiceTest extends AbstractContextConfigLoaderTest{
private CustomerDao mockCustomerDao;
private CustomerService customerService;
private String accountNumber="5247710009575432";
@Before
public void setUp(){
mockCustomerDao= EasyMock.createMock(CustomerDao.class);
customerService= new CustomerService();
}
如果我使用Spring bean配置使用setter注入,我会将mocked dao对象设置为customerService,如下所示。
customerService.setCustomerDao(mockCustomerDao);
如果是Spring注释,我该如何做同样的事?
答案 0 :(得分:1)
您可以使用静态设置方法
protected void setCustomerDao(CustomerDao customerDao)
并且只在JUnit中使用它来设置模拟的依赖项。受保护的访问将阻止任何不在同一个包中的类使用该方法。
答案 1 :(得分:0)
我建议在测试中使用类似@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration的弹簧,在弹簧上下文中进行测试 把模拟作为春豆。
<bean class="org.easymock.EasyMock" factory-method="createMock">
<constructor-arg value="some.package.CustomerDao" />
</bean>
现在应连接到CustomerService,以记录在测试类中连接模拟所需的预期行为:
@Autowired
private CustomerDao mockCustomerDao;
@Autowired
private CustomerService customerService;
答案 2 :(得分:0)
为什么不通过构造函数公开它并以这种方式注入它?您的生产代码可以使用Spring,您的测试代码可以直接实例化对象。
此刻,您将受到DI框架的支配。打破这种依赖。