java.lang.IllegalStateException:缺少上述方法调用 getMessage(“title”) 的行为定义
2022-09-01 06:34:44
我正在使用EasyMock(版本2.4)和TestNG来编写UnitTest。
我有一个以下方案,我无法更改类层次结构的定义方式。
我正在测试正在扩展A类的ClassB。
B 类如下所示
public class ClassB extends ClassA {
public ClassB()
{
super("title");
}
@Override
public String getDisplayName()
{
return ClientMessages.getMessages("ClassB.title");
}
}
A 类代码
public abstract class ClassA {
private String title;
public ClassA(String title)
{
this.title = ClientMessages.getMessages(title);
}
public String getDisplayName()
{
return this.title;
}
}
客户端消息类代码
public class ClientMessages {
private static MessageResourse messageResourse;
public ClientMessages(MessageResourse messageResourse)
{
this.messageResourse = messageResourse;
}
public static String getMessages(String code)
{
return messageResourse.getMessage(code);
}
}
消息资源类代码
public class MessageResourse {
public String getMessage(String code)
{
return code;
}
}
测试类 B
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);
}
}
当我运行此测试时,我得到以下异常:
java.lang.IllegalStateException:缺少上述方法调用 getMessage(“title”) 的行为定义
在调试时,我发现的是,它没有考虑模拟方法调用mockMessageResourse.getMessage(“ClassB.title”),因为它是从构造器(ClassB对象创建)调用的。
任何人都可以帮我如何测试在这种情况下。
谢谢。