首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DRYing Up EasyMock试验

DRYing Up EasyMock试验
EN

Stack Overflow用户
提问于 2012-06-29 18:03:16
回答 1查看 337关注 0票数 0

EasyMock测试似乎倾向于遵循以下模式:

代码语言:javascript
复制
@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);
}

对于一个测试来说,这很好,但是当我想在不同的方法中再次测试相同的逻辑时,会发生什么呢?我的第一个想法是这样做:

代码语言:javascript
复制
@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进行测试的更好方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 18:10:30

您所遇到的问题是因为单元测试应该是湿不干。单元测试将倾向于重复自己。如果您可以安全地删除重复(这样它就不会创建不必要的耦合测试),那么就去做吧。如果没有,那就不要强迫它。单元测试应该是快速的,并且是easy...if --它们不是,那么您正在花费太多的时间进行测试,而不是编写业务价值。

只有我的两分钱。顺便说一句,的单元测试艺术是一个很好的阅读单元测试,并涵盖了这个主题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11266765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档