单元测试 – 单元测试断言重复
发布时间:2020-12-14 04:53:57 所属栏目:百科 来源:网络整理
导读:我正在研究TDD并在我当前的项目中进行实验. 我注意到我必须在测试中复制很多断言. 这是情况: 我有两个构造函数的Order类,第一个是默认的 第二个有三个参数 Order(int customerId,int typeId,decimal amount) 在OrderTests类中,我正在检查分配是否正常 Asser
我正在研究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语句中检查多个条件,就像在示例中一样,这会使事情变得复杂.它降低了测试可读性,如果任何一个条件失败,可能很难找到原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |