这个简单的单元测试总是通过,我无法弄清楚原因。
@RunWith(JUnit4.class)
class SampleTest {
@Test testSomething() {
Uri uri = Uri.parse("myapp://home/payments");
assertTrue(uri == null);
}
}
到目前为止,我所尝试的是使用"传统" URI(http://example.com
)但uri
也是null
。
答案 0 :(得分:16)
我使用Robolectric解决了这个问题。
这些是我的单元测试配置
build.gradle
\\HKEY_CURRENT_USER\Software\Sparx Systems\EA400\EA\OPTIONS\FONTNAME
\\HKEY_CURRENT_USER\Software\Sparx Systems\EA400\EA\OPTIONS\FONTSIZE
测试类
dependencies {
...
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.4.2"
}
它适用于我,希望这可以帮助你。
答案 1 :(得分:11)
检查您应用的gradle文件中是否包含以下内容:
Uri
java.lang.RuntimeException: Method parse in android.net.Uri not mocked. See http://g.co/androidstudio/not-mocked for details.
是一个Android类,因此无法在本地单元测试中使用,如果没有上面的代码,您将获得以下代码:
null
上面的代码会抑制此异常,而是提供返回默认值的虚拟实现(在这种情况下为template<typename T>
class Class {
template<typename O>
Class(O *o, std::true_type) {}
template<typename O>
Class(O *o, std::false_type) {}
public:
template<typename O>
Class(O *o): Class(o, typename std::is_convertible<O*, T*>::type) {}
};
)。
另一个选择是你在测试中使用了一些框架,它提供了Android类中方法的实现。
答案 2 :(得分:4)
Uri是Android类,因此在测试中使用之前需要进行模拟。
答案 3 :(得分:0)
最后,我只是将我的代码更改为接受URI String
,所以现在它在生产和测试中都有效,并且省略Uri.parse()
的使用。现在需要URI的地方我只使用uri.toString()
而不是解析String
。