我在这段代码中使用的反射非常有限:

public NetworkClient createNetworkClient() {
    try {
        return (NetworkClient) getNetworkClientClass().getConstructors()[0].newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

如何测试(使用单元测试)newInstance() 抛出InvocationTargetException(以及另一个异常)?

我目前在其余的UT中使用Mockito和Hamcrest。

最佳答案

在junit测试的某个地方,您正在创建NetworkClient类的实例。这应该在setUp()方法(junt 3)或@Before方法(junit 4)中。无论在哪里,都将实例包装在spy()中

classToTest = spy(new NetworkClient());

如果您使用的是NetworkClient默认构造函数,只需使用@Spy批注声明该字段,Mockito便会为您创建它作为间谍。

@间谍
私有NetworkClient classToTest;

请确保在@Before或setUp方法中调用MockitoAnnotations.initMocks(this);,以使注释生效。

一旦classToTest字段成为间谍,您就可以模拟出getConstructors()类返回您的测试数组,并让第一个构造函数抛出所需的异常。

08-03 17:47