簡體   English   中英

IllegalStateException:在同一方法中有兩次調用時缺少行為定義

[英]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上的設置程序,這些設置程序導致了錯誤。

我可以選擇:

  1. 設置兩個對象
  2. 使用EasyMock.isNull(Contact.class)代替EasyMock.isA(Contact.class)

但是,由於在實際情況下可以將其中之一設為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM