我目前正在对我的 Controller 的一个方法进行单元测试。只是尝试测试该方法是否返回正确的字符串。
@RequestMapping(value = "/createTestscenario", method = RequestMethod.POST)
public String createTestscenario(@PathVariable("tdid") Integer testdesignID, @ModelAttribute("testscenario") Testscenario testscenario){
Testdesign testdesign = this.testdesignService.getTestdesignById(testdesignID);
testscenario.setTestdesign(testdesign);
testdesign.getTestscenarioSet().add(testscenario);
this.testdesignService.saveTestdesign(testdesign);
return "redirect:/projects";
}
这是我的单元测试
@Test
public void createTestscenario1() throws Exception {
Testdesign testdesign = new Testdesign();
testdesign.setId(1);
Testscenario testscenario = new Testscenario();
testscenario.setId(1);
Testscenario testscenario2 = new Testscenario();
testscenario.setId(2);
Set<Testscenario> set = new HashSet<>(Arrays.asList(testscenario));
testdesign.setTestscenarioSet(set);
testscenario.setTestdesign(testdesign);
EasyMock.expect(testdesignService.getTestdesignById(1)).andReturn(testdesign);
EasyMock.replay(testdesignService);
String test = controller.createTestscenario(1, testscenario2);
EasyMock.verify(testdesignService);
Assert.assertEquals("redirect:/projects", test);
}
当我运行测试时,我收到错误:
java.lang.AssertionError:
Unexpected method call TestdesignServiceImpl.saveTestdesign(com.example.testclusters.model.Testdesign@28feb3fa):
说实话,我不知道错误出在哪里。我无法模拟 saveTestdesign 方法,例如:
EasyMock.expect(testdesignService.save(testdesign)).andReturn(..);
因为 save 是一个 void 方法。
有人知道如何修复这个单元测试吗?
最佳答案
只需在重放之前调用 testdesignService.save(testdesign)
即可。这就是设置 void 方法异常的方法。
你也可以这样做
testdesignService.save(testdesign)
expectLastCall();
但是expectLastCall()
实际上是不必要的。它的存在只是为了执行诸如 expectLastCall().andThrow(new RuntimeException())
关于java - AssertionError 单元测试时意外的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791732/