gpt4 book ai didi

java - 模拟注解方法时的 NPE

转载 作者:行者123 更新时间:2023-11-30 10:16:20 25 4
gpt4 key购买 nike

任务是在调用table.annotationType().getMethod("name")时引发NoSuchMethodException异常。

我有以下代码

@Mock(answer = RETURNS_DEEP_STUBS)
private Table table;

@Test(expectedExceptions = NoSuchMethodException.class)
public void testGetSupportClassesDatabaseThrowException() throws NoSuchMethodException {
String testPackageName = "com.usc.dbd.util.supporttable";

MockitoAnnotations.initMocks(this);

when(table.annotationType().getMethod("name")).thenThrow(NoSuchMethodException.class);

SupportTables.getSupportClasses(testPackageName);
}

测试失败并在 when... 行出现 NullPointerException

testCompile("org.mockito:mockito-core:2.7.17")

Table 是来自 javax.persistence

的注解

问题可能出在模拟 Table 接口(interface)上。

我正在寻找如何测试这种情况的解决方案。

最佳答案

这里有两件事:

  • NPE 很奇怪(稍后我会看看是否能找到解释)
  • 即使没有 NPE,您的测试也毫无意义

您看,您创建了 Table 类的一个 模拟实例。您配置为对特定调用作出 react ,但出现异常。

然后您调用一个静态 方法,而不以任何方式使用该模拟对象。那根本不会做任何事情。

之后,静态调用对您模拟的表实例任何一无所知。您可能假设您的模拟设置会影响任何 Table 对象。不,不会!它只会影响发生在该特定 对象上的调用。

如果你想控制在任何地方创建的 任意 Table 实例,你有更多的事情要做(例如,你必须研究使用 PowerMock 或 JMockit 来拦截/控制构造函数调用).

长话短说:如现在所写,您的测试用例根本没有按照您编写的目的进行。

关于java - 模拟注解方法时的 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50136334/

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