java.lang.IllegalStateException:前面的方法调用getMessage(" title")缺少行为定义 [英] java.lang.IllegalStateException: missing behavior definition for the preceding method call getMessage("title")
问题描述
我正在使用EasyMock(版本2.4)和TestNG编写UnitTest。
I'm using EasyMock(version 2.4) and TestNG for writing UnitTest.
我有以下场景,我无法改变定义类层次结构的方式。
I have a following scenario and I cannot change the way class hierarchy is defined.
我正在测试扩展ClassA的ClassB。
I'm testing ClassB which is extending ClassA.
ClassB看起来像这样
public class ClassB extends ClassA {
public ClassB()
{
super("title");
}
@Override
public String getDisplayName()
{
return ClientMessages.getMessages("ClassB.title");
}
}
ClassA代码
public abstract class ClassA {
private String title;
public ClassA(String title)
{
this.title = ClientMessages.getMessages(title);
}
public String getDisplayName()
{
return this.title;
}
}
ClientMessages类代码
public class ClientMessages {
private static MessageResourse messageResourse;
public ClientMessages(MessageResourse messageResourse)
{
this.messageResourse = messageResourse;
}
public static String getMessages(String code)
{
return messageResourse.getMessage(code);
}
}
MessageResourse类代码
public class MessageResourse {
public String getMessage(String code)
{
return code;
}
}
测试ClassB
import static org.easymock.classextension.EasyMock.createMock;
import org.easymock.classextension.EasyMock;
import org.testng.Assert;
import org.testng.annotations.Test;
public class ClassBTest
{
private MessageResourse mockMessageResourse = createMock(MessageResourse.class);
private ClassB classToTest;
private ClientMessages clientMessages;
@Test
public void testGetDisplayName()
{
EasyMock.expect(mockMessageResourse.getMessage("ClassB.title")).andReturn("someTitle");
clientMessages = new ClientMessages(mockMessageResourse);
classToTest = new ClassB();
Assert.assertEquals("someTitle" , classToTest.getDisplayName());
EasyMock.replay(mockMessageResourse);
}
}
当我运行此测试时,我是获得以下异常:
When I'm running this this test I'm getting following exception:
java.lang.IllegalStateException:前面的方法调用缺少行为定义getMessage(title)
java.lang.IllegalStateException: missing behavior definition for the preceding method call getMessage("title")
在调试我发现的内容时,它没有考虑模拟方法调用
mockMessageResourse.getMessage(ClassB.title ) ,因为它是从construtor调用的(ClassB对象创建)。
While debugging what I found is, it's not considering the mock method call mockMessageResourse.getMessage("ClassB.title") as it has been called from the construtor (ClassB object creation).
任何人都可以帮助我如何在这里测试case。
Can any one please help me how to test in this case.
谢谢。
推荐答案
你需要致电 EasyMock.replay(mock)
在调用测试方法之前。调用测试方法后,您可以调用 EasyMock.verify(mock)
来验证模拟是否被调用。
You need to call EasyMock.replay(mock)
before calling the method under test. After calling the method under test you can call EasyMock.verify(mock)
to verify the mock is called.
接下来,您需要使用title参数添加另一个 expect
调用,因为您调用它两次。
Next you need to add another expect
call with the "title" argument since you call it twice.
代码:
EasyMock.expect(mockMessageResourse.getMessage("title")).andReturn("title");
EasyMock.expect(mockMessageResourse.getMessage("ClassB.title")).andReturn("someTitle");
EasyMock.replay(mockMessageResourse);
clientMessages = new ClientMessages(mockMessageResourse);
classToTest = new ClassB();
Assert.assertEquals("someTitle" , classToTest.getDisplayName());
EasyMock.verify(mockMessageResourse);
这篇关于java.lang.IllegalStateException:前面的方法调用getMessage(" title")缺少行为定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!