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

ReSharper dotcover showing 0% coverage despite tests running through code

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

所以我有一个由大量 EF Core LINQ 组成的 .NET Core CQRS API。下面是我查询的主要执行方法之一的简单示例(我省略了 DI 构造函数,但我相信你 git 这个想法):

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;
}

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

[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);
 }

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

但是,运行 dotcover 运行测试,通过了测试,但表示 none 已被覆盖。

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

所以我认为通过盲目的运气我已经能够解决我的问题并且想要post我所做的以防万一它可以帮助其他人。

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

  1. 在 ReSharper 中 |选项... |点封面 |一般,禁用 'Use preloaded Unit Test runners'
  2. 保存的设置
  3. 返回并启用 'Use preloaded Unit Test runners'
  4. 保存的设置

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

我已经向 JetBrains 发回了一条消息,如果他们给我任何关于解决问题的原因的信息,我也会 post。

当 dotCover 无法识别某些单元测试时,我遇到了类似的问题。

我能够通过从测试项目引用中删除 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 并安装 MSTest.TestFrameworkMSTest.TestAdapter nuget 包来解决它。