我使用EasyMock(版本2.4)和TestNG編寫UnitTest。java.lang.IllegalStateException:上述方法調用缺少的行爲定義getMessage(「title」)
我有以下場景,我無法改變類層次結構的定義方式。
我在測試擴展ClassA的ClassB。
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);
}
}
當我運行這個這個測試我發現了以下情況例外:
java.lang.IllegalStateException :缺少上述方法調用getMessage的行爲定義(「標題」)
在調試我發現是,它不考慮模擬方法調用 mockMessageResourse.getMessage(「ClassB.title」),因爲它已經從construtor(ClassB的對象創建)調用。
任何人都可以幫助我在這種情況下如何測試。
謝謝。
相同。檢查方法是否會返回一些東西,即使你不期望它(方法鏈接)似乎是一個好主意。 – 2015-06-08 07:13:16