我正在尝试测试在 Android 上使用 UnitTest 找不到一个类。
发生了什么:
1. 我正在编写一个带有 transitive
依赖项的 android 库,这些依赖项在主机应用程序中解析
2. 开发者可能会移除一些依赖,例如移除所有com.example.package
3. 我有一个工厂,它将尝试实例化(使用反射)一个对象并捕获 ClassNotFoundException
。如果开发者移除依赖,应该抛出异常。
4. 我想测试这个案例,但我发现的只是依赖关系问题,而不是如何测试它。
我要测试的示例代码
try {
sNetworkResponseBuilderClass = OkHttpNetworkResponse.Builder.class;
} catch (Exception e){
// <<<< I want to test this case
new ClassNotFoundException("Unable to find OkHttpNetworkResponse.Builder.class").printStackTrace();
return null;
}
使用的库: hamcrast、mockito、JUnit 4。
你知道怎么做吗?
最佳答案
所以对我来说,你需要做的第一件事就是提取可以抛出 ClassNotFoundException
的代码部分,以便能够轻松地模拟它,例如:
public Class<? extends NetworkResponseBuilder> getNetworkResponseBuilderClass()
throws ClassNotFoundException {
// Your logic here
}
然后您可以使用 Mockito.spy
测试一个真实的工厂实例,以便能够将方法 getNetworkResponseBuilderClass()
的行为重新定义为下一个:
public void testFactoryIfNetworkResponseBuilderNotFound() {
Factory factory = spy(new Factory());
when(factory.getNetworkResponseBuilderClass()).thenThrow(
new ClassNotFoundException()
);
// The rest of your test here
}
public void testFactoryIfNetworkResponseBuilderFound() {
Factory factory = spy(new Factory());
when(factory.getNetworkResponseBuilderClass()).thenReturn(
OkHttpNetworkResponse.Builder.class
);
// The rest of your test here
}
更多详情 Mockito.spy .
关于java - 测试 ClassNotFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36714998/