【问题标题】:How to find Unit Tests that call a specific method during their execution?如何找到在执行期间调用特定方法的单元测试?
【发布时间】:2014-11-03 16:08:28
【问题描述】:

假设我有一个方法 M(),它将在执行测试 T1()T2() 期间被调用。

有没有办法查出M会在T1T2执行?

我知道通过代码不可能找到它。但是使用单元测试的执行历史也很好。

【问题讨论】:

  • 代码覆盖工具使用这些机制。这就是你要找的吗?
  • 单元测试框架通常允许监听一个方法是否被调用。 Nunit,犀牛
  • @MrFox 我正在使用 Nunit。但是我在哪里可以找到呢?
  • mehrandvd @MrFox 指的是诸如 RhinoMock、Moq、NSubstitute 等模拟框架,它们通常与 NUnit 和 MSTest 等测试框架一起使用。它们要求您使用依赖注入(控制反转)并使用接口调用对象,这些工具可以通过这些接口模拟(或存根)并验证交互。学习编写可测试的代码将是一段艰难但值得的旅程。试着专注于你想让代码做什么,而不是它是怎么做的。

标签: c# .net visual-studio unit-testing code-coverage


【解决方案1】:

OpenCover(也可通过nuget 获得)具有此功能-coverbytest,其结果可以使用ReportGenerator 可视化。

【讨论】:

  • @SrikanthVenugopalan 不客气 - 这是爱的劳动
【解决方案2】:

NCrunch 是一款出色的测试工具(付费),它可以在线和报告(指标)显示测试覆盖率(包括这些方法)。

NSubstitute(和其他人)允许您进行检查,例如 .Recieved(),允许您指定预期的两个参数以及您预期它被调用的次数(或不被调用!)

http://nsubstitute.github.io/help/received-calls/

[Test]
public void Should_execute_command_the_number_of_times_specified() {
  var command = Substitute.For<ICommand>();
  var repeater = new CommandRepeater(command, 3);
  //Act
  repeater.Execute();
  //Assert
  command.Received(3).Execute(); // << This will fail if 2 or 4 calls were received
}

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多