【发布时间】: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