配置同时使用PowerMock和Robolectric对Android进行单元测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置同时使用PowerMock和Robolectric对Android进行单元测试相关的知识,希望对你有一定的参考价值。

Robolectric官网上给了一个配置教程,但是我使用它的方法进行配置,发现使用Mockito.spy函数的时候会出现Exception。
后来在PowerMock官网上找到了另外一个教程,里面说使用PowerMockRule是不靠谱的,要使用PowerMock 1.6.0引入的新的@PowerMockRunnerDelegate annotation来进行配置

具体配置文件如下:
module里面的build.gradle添加依赖: 
  1. dependencies {
  2. ......
  3. testCompile "org.robolectric:robolectric:3.0"
  4. testCompile ‘org.mockito:mockito-core:1.10.19‘
  5. testCompile ‘junit:junit:4.12‘
  6. testCompile "org.powermock:powermock-module-junit4:1.6.4"
  7. testCompile "org.powermock:powermock-module-junit4-rule:1.6.4"
  8. testCompile "org.powermock:powermock-api-mockito:1.6.4"
  9. testCompile "org.powermock:powermock-classloading-xstream:1.6.4"
  10. }

对下面的 RobolectricTest 基类进行继承,就可以正常使用PowerMock和Robolectric进行测试了
  1. import org.junit.runner.RunWith;
  2. import org.powermock.core.classloader.annotations.PowerMockIgnore;
  3. import org.powermock.modules.junit4.PowerMockRunner;
  4. import org.powermock.modules.junit4.PowerMockRunnerDelegate;
  5. import org.robolectric.RobolectricGradleTestRunner;
  6. import org.robolectric.annotation.Config;
  7. /**
  8. * Base class extended by every Robolectric test in this project.
  9. */
  10. @RunWith(PowerMockRunner.class)
  11. @PowerMockRunnerDelegate(RobolectricGradleTestRunner.class)
  12. @Config(constants = BuildConfig.class,
  13. sdk = 21)
  14. @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
  15. public abstract class RobolectricTest {
  16. }





以上是关于配置同时使用PowerMock和Robolectric对Android进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powermock 在 Sonarqube 中配置 jacoco 以进行集成和单元测试报告

PowerMock:模拟仅影响一个测试的静态方法

PowerMockito 同时mock多个对象

单元测试-PowerMock

PowerMock框架讲解及使用

如何用powermockrunner覆盖循环