微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 单元测试断言重复

我正在研究TDD并在我当前的项目中进行实验.
我注意到我必须在测试中复制很多断言.
这是情况:
我有两个构造函数的Order类,第一个认的
第二个有三个参数

Order(int customerId,int typeId,decimal amount)

在OrderTests类中,我正在检查分配是否正常

Assert.IsTrue(o.CustomerId == 5 && o.TypeId == 3 && amount == 500)

我有订单服务类和以下创建订单方法,因为订单创建是复杂的过程.

Order CreateOrder(int cusotmerId,int amount,moreParams...)

OrderServiceTests类测试了这个方法,我需要使用相同的assert来检查Order在CreateOrder服务中是否已正确创建.

Assert.IsTrue(o.CustomerId == 5 && o.TypeId == 3 && amount == 500)

>在测试中有这样的重复是否可以?
>在测试中提取具有相同断言的方法是否有意义,有时数字或重复断言可能多于一个?或者这样的方法提取使测试不可读?

解决方法

如果您有多种方法来创建对象,您可能希望测试每个创建方法的对象状态(即参数化构造函数和工厂方法).因此,复制断言是有意义的.

在你完成测试后的重构过程中(如果你不仅在生产代码中发现重复,而且在你的测试中也发现了重复),那么你应该通过例如使用Extract Method重构.

[TestMethod]
public void if_parametrized_ctor_is_called_then_state_should_be_accordingly {
  var order = new Order(customerId,...);
  ObjectPropertiesShouldBeSetTo(order,customerId,...);
}

[TestMethod]
public void if_factory_method_is_called_then_state_should_be_accordingly {
  var order = myFactory.CreateOrder(customerId,...);
}

// Extracted to remove code duplication
public void ObjectPropertiesShouldBeSetTo(Order order,int customerId,...) {
  Assert.AreEqual(customerId,order.CustomerId);
  Assert.AreEqual(...);
}

如果您在一个Assert语句中检查多个条件,就像在示例中一样,这会使事情变得复杂.它降低了测试可读性,如果任何一个条件失败,可能很难找到原因.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐