Robolectric使用(二)配置相关

Robolectric使用(二)

上篇文章讲了Robolectric的简单使用,在这里会详细讲一下Robolectric的配置相关的知识点


  • Robolectric的一部分行为可以在运行时被配置,使用robolectric.properties文件在包级别配置,或者使用@Config注解在class级别或者method级别配置
  • @Config注解
    可以为单个test class 或者method使用@Config注解做出配置,这个注解在method级别上指定的值将覆盖class级别的配置
  • 被经常使用的注解配置可以使用基类统一配置
@Config(sdk=JELLYBEAN_MR1,
      manifest="some/build/path/AndroidManifest.xml",
      shadows={ShadowFoo.class, ShadowBar.class})
  public class SandwichTest {
  }
  • robolectric.properties文件
    为包级别的test配置需要在应用合适的包下创建一个文件名为 robolectric.properties的文件。
    通常,这个文件需要放在src/test/resources目录下的合适的包名目录下(比如src/test/resources/com/lsp/robolectric.properties)
    下面是例子:
#src/test/resources/com/mycompany/app/robolectric.properties
sdk=18
manifest=some/build/path/AndroidManifest.xml
shadows=my.package.ShadowFoo,my.package.ShadowBar

在robolectric的配置中当class或者method有@Config注解,将会覆盖properties的配置

  • Global Configuration 全局配置
    如果你希望改变配置的默认值,你需要继承RobolectricTestRunner 并且重写buildGlobalConfig方法,然后你可以使用@RunWith注解指定你自定义的test runner

  • Robolectric将会在运行时 试图通过在manifest文件里指定的application 类来创建一个application对象,如果想要提供一个自定义的实现,需要做出如下设置:

@Config(application = CustomApplication.class)
public class SandwichTest {

    @Config(application = CustomApplicationOverride.class)
    public void getSandwich_shouldReturnHamSandwich() {
    }
}

robolectric允许你自己改变到manifest resource目录 以及assets目录的路径。如果你有一个自定义的build系统,这将是很有用的,你可以指定这些配置如下设置

@Config(resourceDir = "some/build/path/res")
public class SandwichTest {

    @Config(resourceDir = "other/build/path/ham-sandwich/res")
    public void getSandwich_shouldReturnHamSandwich() {
    }
}
  • 配置修饰词Configure Qualifiers

  • System Properties
    一些额外的选项可以通过全局的设置系统属性来配置:

  1. robolectric.enabledSdks-逗号隔开的sdklevel或者名字列表是对进程可用的,在运行的时候只测试在list中指定的sdk。默认是所有sdk都是可用的
  2. robolectric.offline-设置为true 关闭jar包的动态获取
  3. robolectric.dependency.dir-在offline模式的时候,指定一个文件夹来包含运行时依赖
  4. robolectric.dependency.repo.id-为运行时依赖设置maven依赖库的id(默认是sonatype)
  5. robolectric.dependency.repo.url-设置maven库url(默认https://oss.sonatype.org/content/groups/public/)
  6. rebolectric.logging.enabled-设置为true打开默认logging

当使用gradle的时候,可以为单元测试的所有block配置系统属性,比如,重写Maven 库url和id通过sonatype之外的仓库去下载运行时依赖

android {
  testOptions {
    unitTests.all {
      systemProperty 'robolectric.dependency.repo.url', 'https://local-mirror/repo'
      systemProperty 'robolectric.dependency.repo.id', 'local'
    }
  }
}

你可能感兴趣的:(Robolectric使用(二)配置相关)