测试ClassNotFound异常

雨果·格莱斯(Hugo Gresse):

我正在尝试测试在Android上的UnitTest中找不到类。

发生了什么:
1.我正在编写一个具有transitive依赖关系的android库,这些依赖关系在宿主应用程序中得到了解决
。2.开发人员可能会删除一些依赖关系,例如删除所有依赖关系com.example.package
。3.我有一个Factory会尝试实例化(使用反射)反对并抓住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。

你知道怎么做吗?

尼古拉斯·菲洛托(Nicolas Filotto):

因此,对我来说,您需要做的第一件事是提取代码中可以抛出a的部分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的更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章