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);
}对于一个测试来说,这很好,但是当我想在不同的方法中再次测试相同的逻辑时,会发生什么呢?我的第一个想法是这样做:
@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"));
}这种方法存在一些基本问题。首先,我的方法调用不能有任何变化。如果我想测试person.cookFood("Turkey Burger"),我的设置方法就无法工作。第二个问题是,我的set方法需要调用createHamburger。如果我调用person.cookFood("Salad"),那么这可能不适用。我可以使用anyTimes()或stubReturn()和EasyMock来避免这个问题。但是,这些方法只验证方法是否被调用,它是用某些参数调用的,而不是方法是否实际被调用。
到目前为止,唯一可行的解决方案是复制和粘贴每个测试的期望,并改变参数。有谁知道用EasyMock进行测试的更好方法吗?
发布于 2012-06-29 18:10:30
您所遇到的问题是因为单元测试应该是湿不干。单元测试将倾向于重复自己。如果您可以安全地删除重复(这样它就不会创建不必要的耦合测试),那么就去做吧。如果没有,那就不要强迫它。单元测试应该是快速的,并且是easy...if --它们不是,那么您正在花费太多的时间进行测试,而不是编写业务价值。
只有我的两分钱。顺便说一句,的单元测试艺术是一个很好的阅读单元测试,并涵盖了这个主题。
https://stackoverflow.com/questions/11266765
复制相似问题