在spring注释的情况下设置模拟对象

时间:2013-10-03 18:55:04

标签: spring junit easymock

我正在使用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注释,我该如何做同样的事?

3 个答案:

答案 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框架的支配。打破这种依赖。