测试类未发现异常

2022-09-02 13:22:24

我试图测试在Android上找不到UnitTest的类。

发生了什么:
1.我正在编写一个Android库,其中包含在主机应用程序
2中解析的依赖项。开发人员可以删除一些依赖项,例如删除所有
3 个依赖项。我有一个工厂,它将尝试实例化(使用反射)一个对象并捕获.如果开发人员删除依赖项,则应引发异常。
4.我想测试这个案例,但我发现的只是依赖关系的问题,而不是如何测试它。transitivecom.example.packageClassNotFoundException

我要测试的示例代码

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。

你知道怎么做吗?


答案 1

所以对我来说,你需要做的第一件事就是提取可以抛出的代码部分,以便能够轻松地模拟它,比如:ClassNotFoundException

public Class<? extends NetworkResponseBuilder> getNetworkResponseBuilderClass()
    throws ClassNotFoundException {
    // Your logic here
}

然后,您可以使用来测试一个真实的工厂实例,以便能够像下面这样重新定义该方法的行为:Mockito.spygetNetworkResponseBuilderClass()

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的更多详细信息。


答案 2

不太确定我是否正确理解了您的问题,但是如果引发异常,您可以使用JUnit进行检查:

@Test(expected=ClassNotFoundException.class)
public void testClassNotFoundException() {
    // a case where the exception gets thrown
}

推荐