【问题标题】:ReSharper dotcover showing 0% coverage despite tests running through code尽管通过代码运行测试,ReSharper dotcover 仍显示 0% 的覆盖率
【发布时间】:2018-10-21 08:16:49
【问题描述】:

我假设这是我的错误,但我不明白为什么 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;
}

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

[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 会运行测试,通过了测试,但表示没有任何测试被覆盖。

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

【问题讨论】:

    标签: c# unit-testing .net-core dotcover


    【解决方案1】:

    所以我认为我靠运气解决了我的问题,并想发布我所做的以防万一它对其他人有所帮助。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-25
        • 1970-01-01
        • 2015-12-14
        • 2023-03-14
        • 1970-01-01
        • 2012-01-18
        • 2014-05-27
        • 1970-01-01
        相关资源
        最近更新 更多