Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试一个不需要';不返回值_C#_Unit Testing - Fatal编程技术网

C# 单元测试一个不需要';不返回值

C# 单元测试一个不需要';不返回值,c#,unit-testing,C#,Unit Testing,我通常在玩TDD和单元测试。我看到的所有示例都返回值,这似乎是最简单的情况。但是,如果我的函数不返回值怎么办 例如,假设我有一个演员类,我需要一种方法来增加它的“健康”。我做了一个如下的单元测试,然后让Actor类满足它,但是这样做可以吗?我在单元测试中没有看到很多使用属性的示例。我应该用不同的方式来思考这类事情吗 [TestMethod] public void IncreaseHealth_PositiveValue_PositiveHealth() {

我通常在玩TDD和单元测试。我看到的所有示例都返回值,这似乎是最简单的情况。但是,如果我的函数不返回值怎么办

例如,假设我有一个演员类,我需要一种方法来增加它的“健康”。我做了一个如下的单元测试,然后让Actor类满足它,但是这样做可以吗?我在单元测试中没有看到很多使用属性的示例。我应该用不同的方式来思考这类事情吗

    [TestMethod]
    public void IncreaseHealth_PositiveValue_PositiveHealth()
    {
        Actor a = new Actor();

        int beforeHealth = a.Health;

        a.IncreaseHealth(5);

        int afterHealth = a.Health;

        Assert.AreEqual(beforeHealth + 5, afterHealth);
    }

这次测试是一个良好的开端。然而,就像测试返回值的方法一样,您应该在有副作用的方法上测试边界条件。在这种情况下,您还应该检查

  • 您的方法不接受否定(或接受否定,并按预期工作)
  • 当运行状况增加某个溢出整数的大值时,结果仍然是可预测的(例如,运行状况被限制在某个值)
  • 将运行状况递减一个大于当前运行状况的值时,剩余运行状况不会变为负值(除非允许)
  • 当生命值为零时,任何其他可能触发的事件都应该被触发

尽管您可以使用本地初始化的对象,但也可以将其放在单元测试对象上,并在
[Setup]
方法中对其进行初始化。

是的,没有任何错误或不寻常之处。你的测试很好。很好,我建议使用一些随机数而不是常数,以增加覆盖率。我不建议使用随机数,随机数可能会导致测试有时通过,有时失败。如果有需要调查的特殊情况(如int.MaxValue、int.MinValue、溢出等),请为这些情况创建单独的测试。在任何情况下,它们都可能需要特殊处理,运行时的默认行为很少是您想要的。测试方法的另一种方法是期望抛出某些特定的异常(当然这也适用于具有返回值的方法)我添加了负值测试,在这个例子中,因为函数名是Increase,所以我不希望发生任何事情。测试失败了,然后我返回并添加了一个if条件,它成功了。我在考虑其他情况时遇到了问题,但你说的很有道理。我感觉有一个共同的主题需要测试,比如溢出等等。谢谢。溢出一个很有趣,因为VS甚至不会让它编译。看来你甚至不能用.NET做那种测试?我知道C++可能会起作用。我正在传递Int32.MaxValue+1,但它无法编译。@user441521要达到溢出,需要调用
IncreaseHealth
两次-一次使用
1
或其他正数,然后使用
Int32.MaxValue