ReSharper dotcover показывает 0% покрытия, несмотря на тесты, выполняемые через код

Я предполагаю, что это ошибка с моей стороны, но я не могу понять, почему ReSharper dotcover показывает мое тестовое покрытие определенных запросов (и команд тоже) как 0%.

Итак, у меня есть .NET Core CQRS API, который состоит из большого количества EF Core LINQ. Ниже приведен простой пример одного из основных методов выполнения моих запросов (я не упомянул конструктор 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 запускает тест, проходит его, но говорит, что ни один из них не покрыт.

Я хотел бы знать, почему, потому что это действительно сводит меня с ума и беспокоит меня, что я сделал что-то совершенно неправильное!


person Ben Thomson    schedule 11.05.2018    source источник


Ответы (2)


Поэтому я думаю, что благодаря слепой удаче я смог решить свою проблему и хотел опубликовать то, что я сделал, на случай, если это поможет кому-то еще.

Пытаясь отправить журналы в JetBrains, я сделал следующее:

  1. В ReSharper | Опции… | обложка | Общее, отключено «Использовать предварительно загруженные средства запуска модульных тестов»
  2. Сохраненные настройки
  3. Вернулся и включил «Использовать предварительно загруженные средства запуска модульных тестов».
  4. Сохраненные настройки

Затем я повторно запустил dotcover, и внезапно все мое тестовое покрытие было показано, а подсветка всего моего тестового кода была показана правильно.

Я отправил сообщение обратно в JetBrains, и если они дадут мне какую-либо информацию о том, почему это решило проблему, я тоже опубликую ее.

person Ben Thomson    schedule 15.05.2018

У меня была похожая проблема, когда dotCover не распознавал некоторые модульные тесты.

Я смог решить эту проблему, удалив Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll из ссылок на тестовый проект и установив пакеты nuget MSTest.TestFramework и MSTest.TestAdapter.

person DanielS    schedule 28.08.2020