Java 模拟注释方法时的NPE
任务是在调用Java 模拟注释方法时的NPE,java,reflection,annotations,mockito,testng,Java,Reflection,Annotations,Mockito,Testng,任务是在调用table.annotationType().getMethod(“name”)时导致NoSuchMethodException异常 我有以下代码 @Mock(answer = RETURNS_DEEP_STUBS) private Table table; @Test(expectedExceptions = NoSuchMethodException.class) public void testGetSupportClassesDatabaseThrowException()
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);
}
当…行时,上出现NullPointerException
时,测试失败
testCompile("org.mockito:mockito-core:2.7.17")
Table
是来自javax.persistence
问题可能出在模拟表
界面中
我正在寻找如何测试这种情况的解决方案。这里有两件事:
- NPE很奇怪(稍后我会看看是否能找到解释)
- 即使没有NPE,你的测试也是毫无意义的
您可以看到,您创建了一个表类的模拟实例。配置为对特定调用作出异常反应的
然后调用静态方法,而不以任何方式使用模拟对象。这根本没用
之后,静态调用不知道有关模拟表实例的任何内容。您可能认为模拟设置会影响任何表对象。不,不会的!它只影响在该特定对象上发生的调用
如果您想控制在任何地方创建的表的任意实例,您还有很多事情要做(例如,您必须研究使用PowerMock或JMockit来拦截/控制构造函数调用)
长话短说:正如现在所写的,您的测试用例根本不符合您编写它的目的。从一个问题开始,这似乎是一个评论,而不是一个答案。mockito版本2.7.17<代码>表是来自javax.persistence的注释annotationType()
是java.lang.annotation
@Turing85中的方法,但不一定是。如果这有帮助的话:有了OP的更多信息,我可以不带问号地重写它。嗯,关于NPE仍然是一个问号…@AStefanovskiy请看我的更新。简言之:我认为你的整个测试都是假的。即使没有NPE,它也不会做你认为它应该做的事情。你有可能分享你完整的依赖关系吗?我想尝试找出导致NullPointerException
的原因,但我无法正确地缩小依赖项的范围。可能的重复