2017-02-28 93 views
-1

我要检查它是否使用了EasyMock的andReturn方法具有相同的值返回测试静态函数。不幸的是,我遇到与"java.lang.IllegalStateException:失踪行为定义为前面的方法调用:”当我使用了EasyMock我想这是不可能通过EasyMock的测试,当我试图想到方法,你会明白问题的代码更好是否有可能通过EasyMock的

问候 的Alper

Menu menu = EasyMock.createMock(Menu.class) 
menu.setName("name"); 
     EasyMock.expect(XmlParseUtility.createLinesToParse(menu).toString()).andReturn(angularLines.toString()); 

错误消息:

java.lang.IllegalStateException: missing behavior definition for the preceding  method call: 
    Menu.getName() 
    Usage is: expect(a.foo()).andXXX() 
+0

这不是错误是什么。 EasyMock遇到了一个你没有告诉它的方法调用。由于它是如何工作的,它会在发生这种情况时产生异常。有两种解决方案:1.告诉图书馆它应该期望被调用的每种方法。 2.切换到允许意外方法调用的模拟库。 –

+0

如果你的意思是 “EasyMock.expect(menu.getName())等于(” 名称 “);”,我已经做到了。切换到嘲笑图书馆普罗霍罗夫,你是什么意思?你可以给我一个例子吗 ? – user2307786

+0

我的意思是不同的嘲笑库是全部。例如,Mockito或Spock。 EasyMock是一个“严格”的嘲笑库,它会让你提供所有可能的方法被模拟调用。这可能会用你无意测试的有效无意义的东西来稀释你的测试(尽管实际效果会逐个改变,有时候你想要这样严格)。 Mockito是一个“宽松”的嘲讽库,它会忽略意想不到的方法调用。 –

回答

0

我不知道你想要做什么评论T的一个。他评论道,EasyMock并不严格。这是你想要的。

如果你想有一个风格的Mockito模拟,您将使用niceMock

然后,你的代码。我觉得你想记录一个电话setName。然后要确保XmlParseUtility.createLinesToParse按预期工作。如果我是正确的,你想这个代码:

Menu menu = EasyMock.createNiceMock(Menu.class); // unrecorded methods will return null 
menu.setName("name"); // recording a call to setName 
replay(menu); // done with recording, going in replaying 
assertEquals(angularLines.toString(), XmlParseUtility.createLinesToParse(menu).toString()); 
verify(menu); // if you want to make sure setName was called 
0

如果您实际上是试图存根静态XmlParseUtility.createLinesToParse()方法调用,那么PowerMock库是你在找什么。

// instantiate angularLines and menu 

PowerMock.mockStatic(XmlParseUtility.class); 
EasyMock.expect(XmlParseUtility.createLinesToParse(menu)).andReturn(angularLines); 
PowerMock.replay(XmlParseUtility.class); 

// invoke test subject 

PowerMock.verify(XmlParseUtility.class); 

PowerMock还要求使用他们的跑步者运行测试,并且包含静态方法的类需要“准备好”。欲了解更多信息,检查他们的documentation

相关问题