2016-05-26 3 views
0
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の2回目の呼び出しでエラーが発生します。これはIllegalStateExceptionです。 (期待して呼び出した後に)追加するときIllegalStateException:同じメソッドで二重呼び出しを行ったときの動作定義がありません

は、しかし:

EasyMock.replay(contactService); 

私はこのエラーを取得する:

Unexpected method call ContactServiceImpl.create([email protected][ 

私がPowerMockを使用してみましたが、私は同じ問題を取得します。そのような両方の呼び出しを持つことも可能ですか? Anytime()はその使用のために存在するようですが、それはあまり働いていません。

答えて

0

実際に間違っていたのは、私のメソッドtestCreateが、エラーの原因となったcontact1とcontact2のセッターを見つけていないということです。

私はどちらかのオプションを持っていた:

  1. EasyMock.isNull(Contact.class)の代わりに、EasyMock.isA(Contact.class)を使用して、両方のオブジェクト
  2. を設定します。

しかし、それはヌルとしてそれらのいずれかを持っているために、実際の例に用可能であったことから、最適なソリューションを開始したオブジェクトまたはヌルの両方を受け入れEasyMock.anyObject(Contact.class)を使用することでした。

@Before 
public void setUp() { 
    contactService = EasyMock.createMock(ContactServiceImpl.class);  
    holderService.setContactServiceImpl(contactService); 
    EasyMock.expect(contactService.create(EasyMock.anyObject(Contact.class))).andReturn(new Contact()).anyTimes(); 
} 
0

モックをリプレイ状態にしたことはありませんでした。 setUpメソッドの最後にEasyMock.replay(contactService);を追加してください。

+0

私は何をしましたか? expectコールの後= setUpメソッドの終了 – Majid

+0

はい。しかし、私はあなたがしたことを正確に行いました。そして私はそれを動作させるために文法エラーの束を修正しなければならなかった。だからあなたの実際のコードは上のコードとは違うと思います。例えば、あなたは 'ContactServiceImpl.create(Contact [] contacts)'や 'ContactServiceImpl.create(Contact ... contacts) 'という型のメソッドを呼び出すようです。 – Henri

+0

createメソッドで配列がどのように見えるのか分かりません。 (私はそれが間違っていたので私のテスト方法を変更しました) – Majid

関連する問題