2013-10-03 50 views
0

我正在使用Junit,EasyMock和Spring編寫單元測試用例。我試圖模擬DAO層呼叫。我用標註在我的應用在彈簧註釋的情況下設置模擬對象

服務層類注入豆:

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註釋的情況下做同樣的事情?

回答

1

您可以使用仍然設置的方法

protected void setCustomerDao(CustomerDao customerDao) 

,並只用它在你的JUnit設置嘲笑的依賴關係。受保護的訪問將阻止任何不在同一個包中的類使用該方法。

+0

這使得用於測試的測試類以及由於使用Spring而引起的API變得髒污。 – tddmonkey

0

我建議在你的測試中用@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration來啓用spring,在你的spring context中進行測試 將模擬作爲spring bean。

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

現在應該是有線向客服,記錄預期的行爲,您將需要連線的模擬測試中的類:

@Autowired 
private CustomerDao mockCustomerDao; 
@Autowired 
private CustomerService customerService; 
0

爲什麼不通過構造暴露這一點,並注入它是辦法?你的產品代碼可以使用Spring,你的測試代碼可以直接實例化對象。

目前,您處於DI框架的擺佈之中。打破依賴關係。