尽管测试通过代码运行,但 ReSharper dotcover 仍显示 0% 的覆盖率

Ben*_*son 2 c# unit-testing dotcover .net-core

我假设这是我的错误,但我不明白为什么 ReSharper dotcover 将我对某些查询(和命令)的测试覆盖率显示为 0%。

所以我有一个由很多 EF Core LINQ 组成的 .NET Core CQRS API。下面是我的查询的主要执行方法之一的简单示例(我省略了 DI 构造函数,但我确定您知道这个想法):

public bool Execute(SelectIsReportRequested query)
{
     var context = _clientDatabase.GetContext(query.DatabaseId);

     var result = (from a in context.Assessments
                   join r in context.Registrations on a.AssessmentId equals r.AssessmentId
                   where a.PublicId == query.ResponseId
                   select r.ReportRequested).SingleOrDefault();

     return result == 1;
}
Run Code Online (Sandbox Code Playgroud)

然后我有以下测试来模拟各种位并运行查询:

[TestMethod]
public void It_should_return_true_if_a_report_has_been_requested_for_the_givenassessment()
{
    const int assessmentId = 1;
    var responseId = Guid.NewGuid();
    var mockRepository = new Mock<ICViewClientContext>();

    var assessments = new List<Assessments>
    {
        new Assessments { AssessmentId = assessmentId, PublicId = responseId },
    };
     var registrations = new List<Registrations>
     {
        new Registrations { AssessmentId = assessmentId, ReportRequested = 1 },
     };

     mockRepository.Setup(x => x.Registrations).Returns(registrations.AsDbSetMock().Object);
     mockRepository.Setup(x => x.Assessments).Returns(assessments.AsDbSetMock().Object);

     var mockClientDatabase = new Mock<IClientDatabase>();
     mockClientDatabase.Setup(x => x.GetContext(1)).Returns(mockRepository.Object);

     var query = new Queries.Assessments.SelectIsReportRequested(2, responseId);
     var handler = new Queries.Assessments.SelectIsReportRequestedHandler(mockClientDatabase.Object);
     var result = handler.Execute(query);

     Assert.AreEqual(true, result);
 }
Run Code Online (Sandbox Code Playgroud)

测试通过(如果我破坏 LINQ 中的逻辑也会失败)或代码中的任何其他逻辑。

然而,运行 dotcover 会运行测试,通过它但说它没有被覆盖。

我很想知道为什么,因为这真的让我发疯,让我担心我做错了什么!

Ben*_*son 7

所以我认为靠运气我已经能够解决我的问题并想发布我所做的以防万一它可以帮助其他人。

在尝试将日志提交给 JetBrains 时,我执行了以下操作:

  1. 在 ReSharper | 选项... | 点封面| 常规,禁用“使用预加载的单元测试运行程序”
  2. 保存的设置
  3. 返回并启用“使用预加载的单元测试运行程序”
  4. 保存的设置

然后我重新运行 dotcover,突然间显示了我所有的测试覆盖范围,并且我所有的测试覆盖代码突出显示都正确显示。

我已经给 JetBrains 发回了一条消息,如果他们给我任何关于为什么解决这个问题的信息,我也会发布。