, "Mocking" , . , .
, , , . , unit test, ProductDatasource, Mocking, "mock" , . .Net Java, JUnit JMock , .
, "" . , - , , .
, , ProductDatasource :
public interface IProductsDatasource {
public List<Product> getProducts();
}
:
public class ProductsDatasource implements IProductsDatasource {
private List<Product> mProducts;
public ProductsDatasource(List<Product> products) {
mProducts = products;
}
public List<Product> getProducts() {
return mProducts;
}
}
, - , TargetAdapter, ProductDatasource. ProductDatasource, . unit test ProductDatasource. , ProductDatasource .
public class TargetAdapter {
private IProductsDatasource mDatasource;
public TargetAdapter(IProductsDatasource datasource) {
mDatasource = datasource;
}
public List<Product> products() {
return mDatasource.getProducts();
}
}
, , , , .
@Test
public void TargetAdapterReturnsProducts() {
List<Product> data = new ArrayList<Product>();
data.add(new Product("Sample Product 1"));
data.add(new Product("Sample Product 2"));
data.add(new Product("Sample Product 3"));
TargetAdapter adapter = new TargetAdapter(new ProductsDatasource(data));
List<Product> products = adapter.products();
Assert.assertNotNull(adapter);
Assert.assertTrue(products.size() == 3);
}
, , . , , , . Mocking , , , . .
, , JMock :
@Test
public void MockingTest() {
final Mockery context = new Mockery();
final List<Product> mockData = new ArrayList<Product>();
mockData.add(new Product("Sample Product 1"));
mockData.add(new Product("Sample Product 2"));
mockData.add(new Product("Sample Product 3"));
final IProductsDatasource mockDatasource = context.mock(IProductsDatasource.class);
context.checking(new Expectations(){{
oneOf (mockDatasource).getProducts(); will(returnValue(mockData));
}});
TargetAdapter adapter = new TargetAdapter(mockDatasource);
List<Product> products = adapter.products();
Assert.assertNotNull(adapter);
Assert.assertTrue(products.size() == 3);
}
, , Mock . mock-, , . , , , , . , , , refactor โ extract
eclipse, , , . , !