java - 测试 ClassNotFound 异常

标签 java android unit-testing junit4

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

相关文章:

java - 使用PhP在android和mysql之间建立连接时出错

android - KeyStore 的强密码

reactjs - 在每次测试之前手动修改initialState并将其传递给商店?

c# - 如何对 BackgroundWorker C# 进行单元测试

java - 如何在干净模式下运行eclipse?如果我们这样做会发生什么?

Java 8 : Observable List - Invalidation Listener nor Change Listener is called in case of property change

Android Min SDK 版本与目标 SDK 版本

unit-testing - t.Cleanup有什么用?

java - htmlunit-driver - 如何模拟拖放?

java - 在小部件android上绘制 Canvas