2

私は特定のメソッドのjunitテストを書いています。このメソッドには、EasyMockでモックしているDAOクラスの他のメソッドへの呼び出しが含まれています。

これらのDAOクラスメソッドの1つが1回呼び出されることを表明したいと思います。これは、expectLastCall()。once()の目的であると私が想定しているものです。問題のメソッドはvoidを返します。

私が現在合格しているテストです。これまでEasyMockを使用したことがないので、ロジックが正しいことを確認したいだけです。私はこの質問を参照として使用しました:voidメソッドを使用したEasyMockの期待

だから、ここにコードがあります:

    @Before
    public void setUp() throws Exception{
    this.fooService = new FooService();
    this.fooMock = createStrictMock(FooDAO.class);
    }

    @Test
    public void test_fooTest(){

    String arg1 = "arg1";
    String arg2 = "arg2";
    this.fooService.setFooDAO(fooMock);
    expect(this.fooMock.someMethod(arg1, arg2)).andReturn(something);
    fooMock.methodThatShouldBeCalledOnce(EasyMock.<Object>anyObject());
    EasyMock.expectLastCall().once();
    replay(this.fooMock);
    this.fooService.methodUnderTest(someArg, someArg2);
    verify(this.fooMock);

    }

これが行うと思うのは、methodThatShouldBeCalledOnceの呼び出しがあり、それが1回だけ発生することを表明することです。someMethodについてはあまり気にしませんが、もちろん、EasyMockは、それを期待するように指示されていない場合は文句を言います。

ありがとうございました!

4

2 に答える 2

1

それは私には正しいように見えます。voidメソッドの呼び出しを削除してテストが失敗することを確認するか、voidメソッドに2番目の呼び出しを追加してテストも失敗することを確認することで、自分で簡単に確認できます。

于 2013-03-06T13:22:10.113 に答える
1

いくつかの方法を気にしない場合は、素敵なモックを作成する必要があります。そうすれば、実際、expectLastCallを呼び出す必要はありません。これは暗黙的ですが、メソッドをモックしていることを明確にすることをお勧めします。once()もデフォルトであるため、必要ありません。

したがって、言い換えると、素敵なミックを使用して、暗黙の呼び出しを削除し、静的インポートを追加し、冗長な「this」を追加しないと、次のようになります。

@Before
public void setUp() throws Exception{
   fooService = new FooService();
   fooMock = createNiceMock(FooDAO.class);
   fooService.setFooDAO(fooMock);
}

@Test
public void test_fooTest(){  
   fooMock.methodThatShouldBeCalledOnce(anyObject());

   replay(fooMock); // or replayAll() if you extend EasyMockSupport

   fooService.methodUnderTest(someArg, someArg2);
   verify(fooMock); // or verifyAll() if you extend EasyMockSupport
}
于 2013-03-11T21:11:47.420 に答える