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'
}
}
}