簡體   English   中英

盡管測試通過代碼運行,但 ReSharper dotcover 仍顯示 0% 的覆蓋率

[英]ReSharper dotcover showing 0% coverage despite tests running through code

我假設這是我的錯誤,但我不明白為什么 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 會運行測試,通過它但說它沒有被覆蓋。

我很想知道為什么,因為這真的讓我發瘋,讓我擔心我做錯了什么!

所以我認為靠運氣我已經能夠解決我的問題並想發布我所做的以防萬一它可以幫助其他人。

在嘗試將日志提交給 JetBrains 時,我執行了以下操作:

  1. 在 ReSharper | 選項... | 點封面| 常規,禁用“使用預加載的單元測試運行程序”
  2. 保存的設置
  3. 返回並啟用“使用預加載的單元測試運行程序”
  4. 保存的設置

然后我重新運行 dotcover,突然我所有的測試覆蓋都顯示出來了,我所有的測試覆蓋代碼高亮顯示都正確顯示。

我已經給 JetBrains 發回了一條消息,如果他們給我任何關於為什么解決這個問題的信息,我也會發布。

當 dotCover 無法識別某些單元測試時,我遇到了類似的問題。

我能夠通過從測試項目引用中刪除Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll並安裝MSTest.TestFrameworkMSTest.TestAdapter nuget 包來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM