我目前正在对我的控制器的方法进行单元测试。只是尝试测试方法是否返回正确的字符串。
public class Var
{
public string name { get; set; }
public string value { get; set; }
}
public class SampleJson
{
public List<Var> vars { get; set; }
public List<string> OtherNames { get; set; }
}
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
var sampleJson = jsSerializer.Deserialize<SampleJson>(jsonText);
这是我的单元测试
@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);
}
老实说,我不知道错误在哪里。我不能模拟saveTestdesign方法,如:
java.lang.AssertionError:
Unexpected method call TestdesignServiceImpl.saveTestdesign(com.example.testclusters.model.Testdesign@28feb3fa):
因为save是一种无效方法。
有人知道如何修复此单元测试吗?
答案 0 :(得分:1)
只需在重播前致电testdesignService.save(testdesign)
。这就是你如何设置void方法的例外。
您也可以
testdesignService.save(testdesign)
expectLastCall();
但expectLastCall()
实际上是不必要的。它仅用于执行expectLastCall().andThrow(new RuntimeException())