对这个小方法进行哪些测试?

dev*_*ium 5 c# testing unit-testing

我目前有以下方法:

public void SetNewRandomValue() {
   double newValue = numberGenerator.GenerateDouble(
                             genesValuesInterval.MinimumValue,
                             genesValuesInterval.MaximumValue
                             );

   this.value = newValue;
}
Run Code Online (Sandbox Code Playgroud)

决定对此方法进行多少次测试(和哪些测试)的准则应该是什么?我目前已经完成了以下一个(仅在实现该方法之后 - 即不是测试优先):

var interval = new Interval(-10, 10);
var numberGeneratorMock = new Mock<INumberGenerator>(MockBehavior.Strict);
var numberGenerator = numberGeneratorMock.Object;

double expectedValue = 5.0;

numberGeneratorMock.Setup(ng => 
        ng.GenerateDouble(interval.MinimumValue, interval.MaximumValue))
        .Returns(expectedValue);

var gene = new Gene(numberGenerator, 0, new Interval(-10, 10));
gene.SetNewRandomValue();

Assert.AreEqual<double>(expectedValue, gene.Value);
Run Code Online (Sandbox Code Playgroud)

这基本上只测试一种情况.回归 - 测试我会说我想不出一种弄乱代码的方法,把它变成功能错误的代码并且仍然有测试通过,也就是说,我觉得这个方法看起来很合理.

你对此有何看法?你会如何处理这个小方法?

谢谢

Wil*_*ler 2

如果代码覆盖率可用于您的测试框架,我将使用您使用的任何测试工具来检查代码覆盖率。

我个人喜欢使用Microsoft Testing ToolNUnit Testing Framework。然后,我可以右键单击我的测试项目Test with NCover(在使用 NUnit 时),它将运行测试并告诉我每个对象和测试覆盖的代码百分比。

我说,当您检查完代码覆盖率(至少达到 98% 的代码覆盖率)时,您的代码可能会得到很好的测试。

  • 就我个人而言,我不会尝试敲击每一段代码并做出诸如“Assert.IsTrue(1 == 1)”之类的假断言,在我看来,这与“Assert.Pass()”相同。这确实没有道理。当我使用代码覆盖率时,我会查看测试尚未命中的内容,并详细说明我可以进行的最佳测试,以确保我已经对其进行了良好的测试。无论如何,根据你的论点,我只能同意你的观点。我并没有这样看。=) (2认同)