单元测试火灾和忘记方法

时间:2016-01-13 09:06:06

标签: java android junit mockito

我在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());
}

我是测试新手,所以我不确定我的想法是否有问题。

谢谢。

2 个答案:

答案 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)

输入Dependency Injection

隐藏界面背后的分析调用。创建在实际生产代码中使用的一个实现,以及仅在测试中使用的实现。 测试类可能会计算它已收到的呼叫数量等等。然后,您可以通过调用

之类的内容从测试中验证它
assertTrue(analyticsConnector.connectionsMade() == n);

在您的测试代码中。

A lecture/talk on the matter of testing and dependency injection。 我推荐这个视频,那里有一些小块。