0

我正在使用 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 注入,我会像下面那样将模拟的 dao 对象设置为 customerService。

customerService.setCustomerDao(mockCustomerDao);

在 Spring 注释的情况下我该怎么做?

4

3 回答 3

1

您仍然可以使用设置方法

protected void setCustomerDao(CustomerDao customerDao)

并且仅在您的 JUnit 中使用它来设置模拟依赖项。受保护的访问将阻止不在同一个包中的任何类使用该方法。

于 2013-10-03T19:46:18.657 回答
0

我建议在您的测试中使用 @RunWith(SpringJUnit4ClassRunner.class) 和 @ContextConfiguration 之类的东西启用 spring,在测试的 spring 上下文中将模拟作为 spring bean。

<bean class="org.easymock.EasyMock" factory-method="createMock">
    <constructor-arg value="some.package.CustomerDao" />
</bean>

现在应该连接到 CustomerService,以记录您需要在测试类中连接模拟的预期行为:

@Autowired
private CustomerDao mockCustomerDao;
@Autowired
private CustomerService customerService;
于 2014-12-23T12:45:54.377 回答
0

为什么不通过构造函数公开它并以这种方式注入呢?您的生产代码可以使用 Spring,而您的测试代码可以直接实例化该对象。

目前,您受 DI 框架的支配。打破这种依赖。

于 2014-12-23T12:51:57.233 回答