我对android很新,并试图理解bundle是如何工作的.
我被以下单元测试阻止了.有人可以解释一下它失败的原因吗?
@Test
public void testBundle() throws Exception {
Bundle bundle = new Bundle();
String key = "hello";
String value = "world";
bundle.putString(key, value);
Assert.assertEquals(value, bundle.getString(key));
}
junit.framework.ComparisonFailure:
Expected :world
Actual :null
Run Code Online (Sandbox Code Playgroud)
JUnit测试在没有所有Android源代码的本地机器上运行,但只是存根类(在此处描述).这些存根类允许您针对它们编译Android应用程序(因为它们的API与实际的Android框架相同),但它们不包含任何逻辑以使它们"轻松".
默认情况下,如果尝试调用任何存根方法,则会出现异常.像这样的东西:
public Bundle() {
throw new RuntimeException("Stub!");
}
Run Code Online (Sandbox Code Playgroud)
采用这种"快速失败"方法是为了防止开发人员意外地针对这些存根类运行代码,然后想知道为什么它不起作用.
但是,可以使用以下配置更改此行为build.gradle:
android {
...
testOptions {
unitTests.returnDefaultValues = true
}
}
Run Code Online (Sandbox Code Playgroud)
这使得存根方法返回默认值而不是抛出异常.
您可能已启用此功能,因此当您运行JUnit测试时,您不会获得异常,但Bundle#getString()方法只返回默认值(即null).
如果要测试具有Android框架依赖性的代码,则应执行以下任一操作:
在任何情况下,使用unitTests.returnDefaultValues = true都是一个非常危险的功能,因为它会使您的测试不可靠:某些测试可以通过,因为存根方法返回了默认值,但功能将在真实设备上失败.把它关掉.
| 归档时间: |
|
| 查看次数: |
2072 次 |
| 最近记录: |