[英]'IllegalStateException: missing behavior definition for preceeding method call' even though behavior is defined
[英]IllegalStateException: missing behavior definition when having a double call in same method
public class Holder() {
Contact contact1;
Contact contact2;
}
public class ContactServiceImpl() {
public Contact create(Contact contact) {
// do create
}
}
public class HolderServiceImpl() {
ContactService contactService = new ContactServiceImpl();
public Holder createHolder(Holder holder) {
contactService.create(holder.getContact1());
contactService.create(holder.getContact2());
return holder;
}
}
pulbic class HolderServiceTest() {
ContactServiceImpl contactService = new ContactServiceImpl();
HolderServiceImpl holderService = new HolderServiceImpl();
@Before
public void setUp() {
contactService = EasyMock.createMock(ContactServiceImpl.class);
holderService.setContactServiceImpl(contactService);
EasyMock.expect(contactService.create(EasyMock.isA(Contact.class))).andReturn(new Contact()).anyTimes();
}
@Test
public void testCreate() {
Holder holder = new Holder();
holderService.create(holder)
}
}
不設置重播時,第二次調用contactService.create時發生錯誤,即IllegalStateException。
但是,添加時(在Expect調用之后):
EasyMock.replay(contactService);
我收到此錯誤:
Unexpected method call ContactServiceImpl.create(Contact@4ebd441a[
我嘗試使用PowerMock,但遇到了同樣的問題。 甚至可以同時打兩個電話嗎? 似乎存在anytimes()可以使用,但效果不佳。
您從未將模擬放到重播狀態。 只需添加EasyMock.replay(contactService);
在setUp
方法的末尾。
實際上,錯誤的是我的方法testCreate缺少contact1和contact2上的設置程序,這些設置程序導致了錯誤。
我可以選擇:
但是,由於在實際情況下可以將其中之一設為null,因此最好的解決方案是使用EasyMock.anyObject(Contact.class)接受初始對象或null。
@Before
public void setUp() {
contactService = EasyMock.createMock(ContactServiceImpl.class);
holderService.setContactServiceImpl(contactService);
EasyMock.expect(contactService.create(EasyMock.anyObject(Contact.class))).andReturn(new Contact()).anyTimes();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.