【问题标题】:Create unit test cases for a method which does not return any value in C# [duplicate]为在 C# 中不返回任何值的方法创建单元测试用例 [重复]
【发布时间】:2011-08-14 14:31:41
【问题描述】:

可能重复:
Unit testing void methods?

我需要为不返回任何值的 GUI 方法编写单元测试用例,我如何测试 ac

【问题讨论】:

  • 如果方法没有返回任何东西,你到底在测试什么?副作用?它抛出/不抛出异常?

标签: c#


【解决方案1】:

你可以确保它不会抛出,至少是

Assert.DoesNotThrow<ExceptionType>( () => myClass.myMethod() );

但是,请记住,不返回值但执行某些操作的方法依赖于副作用,因此实际上不适合单元测试,因为您无法在单元测试中测试系统的整个状态.

【讨论】:

  • 如果一个测试抛出一个异常然后它没有通过,为什么你要测试它是否没有抛出异常,除非你想把它缩小到一个特定的异常类型?
  • 主要是为了更明确地说明您要测试的内容。单元测试的一项功能是确保代码执行您想要的操作。另一个功能是传达该方法的作用以及如何调用它。测试应该让您对预期会发生什么有所了解,并且使用像 DoesNotThrow 这样的特定测试可以使函数的含义更加明确。
  • 你希望它通过的测试是隐含的,如果你必须明确说明,那么你就是在尝试向低能者传达信息。
  • 实际上,当我几个月后返回代码时,我主要是在尝试与自己交流。如果那是因为我是个白痴,那就这样吧。除了测试方法的正确性之外,单元测试还提供了如何使用代码的示例。
【解决方案2】:

您可以模拟您的方法调用的某些方法和类,并断言它们被调用。您可以为此目的使用一些模拟框架,它们中的大多数都具有测试功能:Assert.IsCalled();

您还可以断言满足了预期的某些环境变化。例如,创建了一个文件。

【讨论】:

    【解决方案3】:

    如果它在传递正确的参数值(如果有)时没有抛出异常,那么它通过了。如果它在传递无效值时抛出正确的异常,那么它就会通过。

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 1970-01-01
      • 2020-07-31
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2016-01-27
      相关资源
      最近更新 更多