【问题标题】:Using Service stub during Activity Junit test在 Activity Junit 测试期间使用服务存根
【发布时间】:2012-08-20 16:55:52
【问题描述】:

我正在为启动服务的活动编写 Junit 测试:

startService(new Intent(this, MyClass.class));

出于测试目的,我想将MyClass.class 替换为存根类(MyStubClass.class)

我对 SOF 进行了广泛的搜索,但找不到解决方案。 是否可以在不向应用程序添加测试相关代码的情况下进行交换?

【问题讨论】:

  • 你试过 JMockIt 或 Mockito 吗?我在这类事情上都成功地使用了这两种方法。
  • 我在这里读到:martinfowler.com/articles/mocksArentStubs.html mock 和 stub 并不完全一样。据我了解,模拟不会给我想要的结果。能否请您指出一个具体示例,其中 JMockIt 或 Mockito 在单元测试期间交换类?

标签: android unit-testing


【解决方案1】:

在评论上述主题时,虽然我同意这篇文章所说的大部分内容,但我不确定我是否同意所有这些内容,甚至是否需要进行如此细粒度的区分。在我看来,我认为模拟是运行时替换,而存根是未完成的工作或依赖于多态性而不是实际替换的特定于测试的实现。但是,我不是专家,所以对我的意见持保留态度。无论如何,当您用模拟版本替换一个类时,不需要在模拟实现中做任何花哨的事情。

无论如何,这是您要求的文档:http://jmockit.googlecode.com/svn/trunk/www/tutorial/StateBasedTesting.html#mocks

我使用 jmockit 来存根我不关心实现的接口,用不抛出异常的存根替换 Android 存根实现,并且有时用功能最少的实现替换那些相同的存根。就我而言,我希望能够快速运行我的单元测试,这意味着在模拟器或物理设备之外运行它们。如果您有兴趣做这种事情,将模拟包与 Robolectric 之类的东西结合使用可以挽救生命。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多