我正在尝试为下面的代码编写一个JUnit,但我不知道如何覆盖用catch块语句编写的代码.任何人都可以为下面的代码编写一个示例JUnit.
在这里,我不想涵盖任何异常,但希望使用Mockito覆盖catch块中编写的代码行.
public Product getProductLookUpData() {
Product product = null;
try{
// Try to get value from cacheable method
product = productCacheDao.getProductLookUpData();
.....//statements
} catch (Exception ex) {
// getting value from db
product = productDao.getIpacMetricCodeLookUpData();
....//statements
}
return product;
}
Run Code Online (Sandbox Code Playgroud)
您可以模拟两者productCacheDao并productDao检查在测试用例中调用这些方法的次数.并且您可以使用这些模拟对象模拟异常抛出,如下所示:
when(mockObject.method(any())).thenThrow(new IllegalStateException());
Run Code Online (Sandbox Code Playgroud)
那么,对于你的情况,我会做这样的事情:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class ProductTest {
private static final Product CACHED_PRODUCT = new Product("some parameters for cached product");
private static final Product DB_PRODUCT = new Product("some parameters for DB product");
private ProductService service;
private ProductDao productDaoMock;
private ProductCacheDao productCacheDaoMock;
@Before
public void setup() {
service = new ProductService();
productDaoMock = mock(ProdoctDao.class);
service.setProductDao(productDaoMock);
productCacheDaoMock = mock(ProdoctCacheDao.class);
service.setProductCacheDao(productCacheDaoMock);
}
@Test
public void testCache() {
when(productCacheDaoMock.getProductLookUpData(any())).thenReturn(CACHED_PRODUCT);
final Product product = service.getProductLookUpData();
Assert.assertEquals(CACHED_PRODUCT, product);
verify(productCacheDaoMock, times(1)).getProductLookUpData(any());
verify(productDaoMock, never()).getIpacMetricCodeLookUpData(any());
}
@Test
public void testDB() {
when(productCacheDaoMock.getProductLookUpData(any())).thenThrow(new IllegalStateException());
when(productDaoMock.getIpacMetricCodeLookUpData(any())).thenReturn(DB_PRODUCT);
final Product product = service.getProductLookUpData();
Assert.assertEquals(DB_PRODUCT, product);
verify(productCacheDaoMock, times(1)).getProductLookUpData(any());
verify(productDaoMock, times(1)).getIpacMetricCodeLookUpData(any());
}
}
Run Code Online (Sandbox Code Playgroud)