gpt4 book ai didi

c# - 部分代码覆盖率 C# - Nunit

转载 作者:行者123 更新时间:2023-11-30 17:03:30 25 4
gpt4 key购买 nike

我有部分代码覆盖率,我不知道为什么。 对于那些在开始阅读之前喜欢这个问题的人

想从“第一篇文章”开始,因为我在我的开发生涯中还很初级,但我一直是一个相对快速的学习者(imo),所以就这样吧。使用 Nunit 进行测试,基于 MVP。

待测代码——

void _view_Delete(object sender, EventArgs<Guid> e)
{
_agRepo.Delete(_agRepo.GetByID(e.Value));

var g = _agRepo.GetAll();
if (g.Count() > 0)
{
_view.FillRelatableAccessGroups(g.Where(x => x.IsRelatable));//partial coverage
_view.FillStandAloneAccessGroups(g.Where(x => !x.IsRelatable));//partial coverage
}

else
{
_view.ShowErrorMsg(true, "No Access Groups Found.");
}

}

测试“if”和“else”语句的代码(假设 repo 和 View 被模拟)-

    [Test]
public void TestDelete()
{
_view.Raise(v => v.Delete += null, this, new EventArgs<Guid>(1.ToGuid()));
_agRepo.AssertWasCalled(r => r.Delete(_agRepo.GetByID(1.ToGuid())));
_view.AssertWasCalled(v => v.FillRelatableAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
_view.AssertWasCalled(v => v.FillStandAloneAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
}

[Test]
public void TestDeleteNoGroups()
{
_agList.Clear();
_view.Raise(v => v.Delete += null, this, new EventArgs<Guid>(1.ToGuid()));
_agRepo.AssertWasCalled(r => r.Delete(_agRepo.GetByID(1.ToGuid())));
_view.AssertWasNotCalled(v => v.FillRelatableAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));
_view.AssertWasNotCalled(v => v.FillStandAloneAccessGroups(Arg<IEnumerable<AccessGroup>>.Is.Anything));

_view.AssertWasCalled(x => x.ShowErrorMsg(true, "No Access Groups Found."));
}

所以我的问题是,我的代码中缺少什么。我需要测试更多的东西,我真的很想找到它。我一直在埋头苦干,试图完全理解测试的来龙去脉。测试驱动开发是我的目标。如果有人有任何类型的输入(好的或坏的),将不胜感激。我什至不介意是否有人能给我足够的 juuuuuuuuust,这样我就可以开始拉动那个比喻的字符串,这个字符串的末尾有我正在寻找的答案。我希望我已经为大家提供了足够的信息。谢谢!

最佳答案

_view 是模拟的,_view 的所有方法都不会对其参数进行操作,例如FillRelatableAccessGroups 将收到它的参数,但不会使用/执行它。

这就是为什么 g.Where(x => x.IsRelatable)g.Where(x => !x.IsRelatable) 没有被你的测试覆盖,因为它们永远不会被执行。

如果您需要完整的测试覆盖率,请考虑使用 _view 的正确实现。类似于 LINQ: Passing lambda expression as parameter to be executed and returned by method

要记住的一件事是,没有 TDD 原则告诉您要实现完整的测试覆盖率。覆盖 90%+ 的最重要的点可能更有值(value)。

关于c# - 部分代码覆盖率 C# - Nunit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520653/

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