use*_*648 5 c# unit-testing assert object-expected
我正在为MVC 5互联网应用程序编写一些单元测试.
我应该在Assert代码行中对预期值进行硬编码,还是在输入值发生变化之前从输入值中计算出该值.
这是一个例子:
我有一个函数从对象有a 和a 的Account对象中减去正确的平衡.AccountsubscriptionCostPerDayaccountBalance
这是代码:
account1.subscriptionCostPerDay = 0.99M;
account1.accountBalance = 10;
Run Code Online (Sandbox Code Playgroud)
我正在测试的函数计算subscriptionCostPerDay并从中减去它accountBalance.在上面的例子中,accountBalance函数调用后应该是9.01.
该Assert语句应该硬编码9.01的值,还是应该从原始对象值计算预期值?
以下是我在上面提到的两种不同类型的示例:
1.
Assert.AreEqual(9.01M, account1Balance, "Account 1 has correct account balance");
Run Code Online (Sandbox Code Playgroud)
2.
decimal expectedAccount1Balance = account1.accountBalance - account1.subscriptionCostPerDay;
Assert.AreEqual(expectedAccount1Balance, account1Balance, "Account 1 has correct account balance");
Run Code Online (Sandbox Code Playgroud)
提前致谢.
DrK*_*och 12
单元测试有两个目标:
为了实现目标(1),您的测试就像是第二个人的校对.您可以独立于在代码中获得此结果的方式编写测试的预期结果.
因此,这是非常重要的,这account1Balance是不以相同的公式,你在你的代码中使用的计算.确切地说,这个公式可能是错误的,编写测试是一种查找方法.
经验法则:“预期值不应包含任何逻辑”。
有一篇很好的Roy Osherove 博客文章“在单元测试中创建错误逻辑的两种不同方法”关于这一点
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |