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 runnerRobolectric将会在运行时 试图通过在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
一些额外的选项可以通过全局的设置系统属性来配置:
- robolectric.enabledSdks-逗号隔开的sdklevel或者名字列表是对进程可用的,在运行的时候只测试在list中指定的sdk。默认是所有sdk都是可用的
- robolectric.offline-设置为true 关闭jar包的动态获取
- robolectric.dependency.dir-在offline模式的时候,指定一个文件夹来包含运行时依赖
- robolectric.dependency.repo.id-为运行时依赖设置maven依赖库的id(默认是sonatype)
- robolectric.dependency.repo.url-设置maven库url(默认https://oss.sonatype.org/content/groups/public/)
- 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'
}
}
}