任务是在调用table.annotationType().getMethod("name")
时导致@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
测试在when...
行testCompile("org.mockito:mockito-core:2.7.17")
处失败。
Table
javax.persistence
是来自Table
问题可能在于模仿Name, Surname, ID, Job, Salary, DOB
adam, Parker, 123, admin, 500, 19.02.1988
joe, Oswald, 897, sales manager, 750, 10.04.1967
界面。
我正在寻找解决方案来测试这种情况。
答案 0 :(得分:1)
这里有两件事:
您会看到,您创建了Table类的一个模拟实例。您配置为对具有异常的特定呼叫做出反应。
然后调用 static 方法,而不以任何方式使用该模拟对象。这根本不会做任何事情。
稍后,静态调用不知道有关您的模拟表实例的任何。您可能认为模拟设置会影响任何 Table对象。不,它不会!它仅影响在特定对象上发生的调用。
如果你想控制任何在任何地方创建的Table的任意实例,你可以做更多的事情(例如,你必须考虑使用PowerMock或JMockit来拦截/控制构造函数调用)。
长话短说:就像现在所写的那样,你的测试用例根本不会做你为它编写的内容。