AssertionError单元测试时意外的方法调用

时间:2017-12-13 11:17:52

标签: java unit-testing easymock

我目前正在对我的控制器的方法进行单元测试。只是尝试测试方法是否返回正确的字符串。

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是一种无效方法。

有人知道如何修复此单元测试吗?

1 个答案:

答案 0 :(得分:1)

只需在重播前致电testdesignService.save(testdesign)。这就是你如何设置void方法的例外。

您也可以

testdesignService.save(testdesign)
expectLastCall();

expectLastCall()实际上是不必要的。它仅用于执行expectLastCall().andThrow(new RuntimeException())

之类的操作