gpt4 book ai didi

java - 测试 ClassNotFound 异常

转载 作者:IT老高 更新时间:2023-10-28 21:01:09 24 4
gpt4 key购买 nike

我正在尝试测试在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com