我在Android上开发,但我是单位测试(JUnit和mockito)的新手。
我写了一个方法,你可以打电话然后忘记它(火与忘记)。如果它是正确的,我对你(根本不重要)并不重要。
该方法只是调用Google Analytics来发送一些分析,因此它在应用上并不重要。
我将代码调用myGoogleAnalyticSingleton.googleAnalytics_sendViewProduct(myProduct)
我忘记了这件事。
方法" googleAnalytics_sendViewProduct(MyProduct myProduct)"是这样的:
public void googleAnalytics_sendViewProduct(MyProduct myProduct) {
final GA_Product gaProduct = new GA_Product(myProduct.getId(),
myProduct.getName(),
myProduct.(so on));
trackerAnalytics.send(gaProduct);
}
所以问题是: 我如何测试每种方法(查看产品,添加到购物车产品,从购物车中删除产品等等)发送指标并发送正确的参数?
public void test_gaViewProduct() {
assertEquals(gaProduct.getId, myTestIdonMyProductModel);
assertEquals(gaProduct.getName, myTestNameOnMyProductModel);
assertEquals .....
assertTrue(sendWasCalled());
}
我是测试新手,所以我不确定我的想法是否有问题。
谢谢。
答案 0 :(得分:1)
模拟Tracker并将其注入您正在测试的代码中:
Tracker mockTracker = mock(Tracker.class);
product.setTracker(mockTracker);
调用您的测试代码(查看产品,添加到购物车,...)
product.addToCart();
然后简单地验证是否已调用所需的方法,例如:
verify(mockTracker).setScreenName("myscreenname");
verify(mockTracker).send(new HitBuilders.AppViewBuilder()
.setCategory("category", TRACKING_ID)
.build());
答案 1 :(得分:0)
隐藏界面背后的分析调用。创建在实际生产代码中使用的一个实现,以及仅在测试中使用的实现。 测试类可能会计算它已收到的呼叫数量等等。然后,您可以通过调用
之类的内容从测试中验证它assertTrue(analyticsConnector.connectionsMade() == n);
在您的测试代码中。
A lecture/talk on the matter of testing and dependency injection。 我推荐这个视频,那里有一些小块。