koe*_*oen 8 testing tdd bdd unit-testing
伪代码中的示例类:
class SumCalculator
  method calculate(int1, int2) returns int
测试这个的好方法是什么?换句话说,我该如何描述我需要的行为?
test1: canDetermineSumOfTwoIntegers
要么
test2: returnsSumOfTwoIntegers
要么
test3: knowsFivePlusThreeIsEight
Test1和Test2看起来很模糊,需要测试一个特定的计算,因此它并没有真正描述正在测试的内容.然而test3非常有限.
测试这些类的好方法是什么?
Bru*_*man 10
我会测试边界条件(max-int,min-int,zero,positive,negative)和一些典型情况:
test1: sumOfPosAndPos
test2: sumOfPosAndNeg
test3: sumOfPosAndZero
test4: sumOfNegAndZero
test5: sumOfMaxIntAndMinInt
等等
有几种哲学.单元测试艺术的作者Roy Osherove 似乎更喜欢使用显式值,并选择每个等价类的最低(或最简单)表示.
这个原则并不适用于您的示例,但在许多其他场景中效果非常好.
例如,如果一个类需要输入正整数,则选择数字1,因为它是所有正整数的最简单表示.
就个人而言,我更喜欢我称之为约束非决定论的原则.这里的要点是我们让某种工厂为给定类型的匿名变量提供服务,因为它迫使我们直接在测试中建立关系.
我正在使用AutoFixture来执行此操作(但您也可以使用其他内容),因此在这种情况下,我会像这样测试SumCalculator:
var fixture = new Fixture();
var int1 = fixture.CreateAnonymous<int>();
var int2 = fixture.CreateAnonymous<int>();
var expectedResult = int1 + int2;
var sut = fixture.CreateAnonymous<SumCalculator>();
var result = sut.Calculate(int1, int2);
Assert.AreEqual(expectedResult, result);
原则上,这个单一测试提供了Calculate方法的规范.我们永远不知道价值是什么int1以及int2是的,那就是在所有这些许多情况下,它实际上没有关系非常合适.
| 归档时间: | 
 | 
| 查看次数: | 432 次 | 
| 最近记录: |