EasyMockテストは次のパターンに従う傾向があるようです。
@Test
public void testCreateHamburger()
{
// set up the expectation
EasyMock.expect(mockFoodFactory.createHamburger("Beef", "Swiss", "Tomato", "Green Peppers", "Ketchup"))
.andReturn(mockHamburger);
// replay the mock
EasyMock.replay(mockFoodFactory);
// perform the test
mockAverager.average(chef.cookFood("Hamburger"));
// verify the result
EasyMock.verify(mockFoodFactory);
}
これは1つのテストでは正常に機能しますが、同じロジックを別の方法で再度テストしたい場合はどうなりますか?私の最初の考えは、次のようなことをすることです。
@Before
public void setUp()
{
// set up the expectation
EasyMock.expect(mockFoodFactory.createHamburger("Beef", "Swiss", "Tomato", "Green Peppers", "Ketchup"))
.andReturn(mockHamburger);
// replay the mock
EasyMock.replay(mockCalculator);
}
@After
public void tearDown()
{
// verify the result
EasyMock.verify(mockCalculator);
}
@Test
public void testCreateHamburger()
{
// perform the test
mockAverager.average(chef.cookFood("Hamburger"));
}
@Test
public void testCreateMeal()
{
// perform the test
mockAverager.average(chef.cookMeal("Hamburger"));
}
このアプローチにはいくつかの根本的な問題があります。1つ目は、メソッド呼び出しにバリエーションを持たせることができないということです。テストしたい場合person.cookFood("Turkey Burger")
、私のセットアップ方法は機能しません。2番目の問題は、セットアップメソッドでcreateHamburgerを呼び出す必要があることです。私が電話した場合person.cookFood("Salad")
、これは当てはまらない可能性があります。anyTimes()
この問題を回避するために、またはstubReturn()
EasyMockを使用することができます。ただし、これらのメソッドは、メソッドが呼び出されたかどうかを確認するだけであり、メソッドが実際に呼び出されたかどうかではなく、特定のパラメーターを使用して呼び出されます。
これまでに機能した唯一の解決策は、すべてのテストの期待値をコピーして貼り付け、パラメーターを変更することです。 DRYの原則を維持するEasyMockでテストするためのより良い方法を知っている人はいますか?