gpt4 book ai didi

c# - 为什么 SonarQube 声称 `return` 行没有被单元测试覆盖?

转载 作者:行者123 更新时间:2023-12-05 00:13:38 26 4
gpt4 key购买 nike

这是我的 API 端点:

[HttpPost]
public int Post(SearchHistory searchHistory)
{
IDashboardRepository dashboardrepos = new DashboardRepository();
int historyId = dashboardrepos.SaveSearchHistoryByUser(searchHistory);
return historyId;
}

这是 SonarQube 报告:

enter image description here

第 37 和 38 行的两个绿色条表示它们已被单元测试覆盖。但出于某种原因,比如 39 不是吗?

这是测试:

[TestMethod()]
public void GlobalSeach_PutTest()
{
SearchHistory history = new SearchHistory {
// redacted for ease of reading on SO
}
var controller = new GlobalSearchController(_config);
int? response = controller.Post(history);
Assert.IsTrue(response != null);
}

最佳答案

您的 Post 方法返回一个 int。在您的测试中,您期望收到一个可为 null 的 int (int?)。

我的猜测是,问题在于当您使用此断言时,您并没有真正测试方法的结果:Assert.IsTrue(response != null);。第一个问题是那种测试永远不会失败。

我想您的 dashboardrepos.SaveSearchHistoryByUser 方法应该返回您刚刚保存在数据库中的实体的主键。基于该假设,我建议您按照我在下面描述的那样重构您的测试,以改进和解决覆盖率问题。

[TestMethod()]
public void GlobalSeach_PutTest()
{
SearchHistory history = new SearchHistory {
// redacted for ease of reading on SO
}

// _dashboardreposMock is an example of Mock<IDashboardRepository>
_dashboardreposMock.Setup(_ => _.SaveSearchHistoryByUser(It.IsAny<SearchHistory>)).Returns(1);

var controller = new GlobalSearchController(_config);
int response = controller.Post(history);
Assert.IsTrue(response == 1);
}

关于c# - 为什么 SonarQube 声称 `return` 行没有被单元测试覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com