部分代码覆盖率 C# - Nunit

2024-01-20

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

首先想说“第一篇文章”,我的开发生涯还很初级,但我的学习速度相对较快(我认为),所以就这样吧。使用Junit进行测试,并基于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”语句的代码(假设存储库和视图被模拟)-

    [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."));
    }

所以我的问题是,我的代码中缺少什么。还有更多事情需要我测试,我真的很想找到它。我一直在埋头尝试完全理解测试的细节。测试驱动开发是我的目标。如果有人有任何意见(好的或坏的),我们将不胜感激。我什至不介意是否有人能给我足够多的东西,这样我就可以开始拉那根隐喻的绳子,它的末端绑着我正在寻找的答案。我希望我已经为大家提供了足够的信息。谢谢!


_view被嘲笑并且 _view 的所有方法都不会对其参数进行操作,例如FillRelatableAccessGroups将收到它的参数,但不会使用/执行它。

因此g.Where(x => x.IsRelatable) and g.Where(x => !x.IsRelatable)不被你的测试覆盖,因为它们永远不会被执行。

如果您需要完整的测试覆盖率,请考虑使用正确的实现_view。 就像是LINQ:将 lambda 表达式作为参数传递以由方法执行和返回 https://stackoverflow.com/questions/1299534/linq-passing-lambda-expression-as-parameter-to-be-executed-and-returned-by-meth

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部分代码覆盖率 C# - Nunit 的相关文章

随机推荐

  • 由于缺少文件,Visual Studio 2010 构建时出错

    我到处搜索 似乎找不到任何有同样问题的人 尽管我确信人们过去也犯过同样的错误 我不小心删除了调试和发布文件夹的内容 现在我收到文件未找到错误 作为背景 它是 C 中的 Windows 窗体应用程序 我正在运行 Visual Studio 1
  • WPF 在代码后面添加不带键的样式资源

    我正在从 WPF 应用程序的后台代码生成一个 xaml 并希望将样式添加到生成的 xaml 我使用资源字典来存储我的应用程序将访问的样式信息 并根据资源字典中的键将其应用于生成的 xaml 中的相应元素 现在我想将特定样式应用于生成的 xa
  • 运行 AWS CLI 命令时出现“configparser.DuplicateOptionError”

    在mac终端中执行以下命令时出现错误 aws configure 我在网上找不到任何有用的东西 而且我是 mac 和 aws 的新手 有人可以帮我解决吗 其他命令也会发生同样的事情 例如aws version命令如which aws会正常工
  • 房间迁移更改表不添加新列并一次又一次地调用迁移

    所以基本上我正在使用空间并尝试添加从数据库版本 1 到 2 的迁移 但我的 alter 命令不起作用 我当前的实现如下 void init db Room databaseBuilder Global getInstance AppData
  • javascript 语法:函数调用和使用括号

    为什么这有效 但不是这个
  • 将 int 转换为 char 而不使用 ASCII [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我如何将小于 10 的 int 转换为 char 例如 5 gt 5 不使用 ASCII 表将 int 转换为 char 由于数字在标准字符
  • php exec 输出被修剪

    我在 php 中使用 exec 又遇到了另一个麻烦我的操作系统是 suse linux 我使用的是 php 5 1 2 不知何故 当我使用 exec 时 我的输出被修剪 in linux gt ps ef grep java root 35
  • Azure AD - 始终需要范围,因此需要一个默认范围

    我已经为一家企业实施了 Azure AD 好吧 还没有完全完成 目的是只有企业中的人员可以使用它 他们必须位于企业的 Active Directory 中 并且存在仅分配给某些用户的特殊目标角色 范围 REST 端点用这些范围进行注释 在
  • 如何选择与行跨度对应的行?

    我有一个动态生成的表 我试图更改其中某些行的背景颜色 有时有些行具有行跨度 我无法弄清楚如何获取与一个 行 相对应的所有行 我用谷歌搜索了我的大脑 发现这个 jsfiddle 非常接近我需要的 在逻辑意义上 http jsfiddle ne
  • 搜索引擎可以索引 JavaScript 生成的网页吗?

    Google 等搜索引擎可以索引 JavaScript 生成的网页吗 当您右键单击并选择在由 JavaScript 例如使用 GWT 生成的页面中查看源代码时 您看不到动态生成的 HTML 我想 如果搜索引擎也看不到生成的 HTML 那么就
  • AppDomain 中的静态字段

    我正在尝试使用 AppDomain 来管理多线程环境中包含大量静态字段的一些遗留代码 我读到这个问题的答案 如何使用 AppDomain 限制静态类的范围以实现线程安全使用 https stackoverflow com questions
  • 经过一段时间后,OpenEdge ABL 自动关闭是/否消息

    现在我有 消息 Hello World 查看为警报框警告按钮是 否更新 lVariable 如何在 14 秒后自动点击 否 如何以 另一种方式 做到这一点 DEFINE FRAME f message This is your messag
  • Django(主干)和基于类的通用视图:一个表单的初始数据出现在另一个表单中

    我遇到了一个奇怪的问题 数据似乎在不同的视图和请求中持续存在 直到服务器重新启动 我已设法将问题简化为以下代码 foobar models py from django db import models class Foo models M
  • CoreData:注释:无法加载优化模型(React Native)

    我无法再启动我的反应本机应用程序 我昨天更新了XCode 也许和它有关 react native run ios Found Xcode workspace xyz xcworkspace CoreData annotation Faile
  • iPhone 上的“不受信任的服务器证书”

    我正在编写一个 iPhone 应用程序 我想连接到 HTTPS 服务器以获取一些信息 但是 我在控制台中收到错误 NSUnderlyingError 错误域 kCFErrorDomainCFNetwork 代码 1202 UserInfo
  • Django Fabric 同步数据库

    您将如何运行此 django 命令来自动与 Fabric 同步数据库 python manage py syncdb settings app settings test 如果尝试运行 它会卡在 是否要创建超级用户帐户 处 是否可以传递 是
  • Facebook API 错误 191

    我正在尝试将我的项目与 Facebook 集成 我一开始只是尝试登录 获取 Facebook 会话并获取一些用户数据 我在本地开发它 所以我的 Facebook 应用程序设置是 site URL http 127 0 0 1 8888 my
  • 给 Java 桌面应用程序换肤?

    有谁知道一种 皮肤 Java 桌面应用程序的方法吗 例如 Winamp 皮肤或 MirandaIM 皮肤 我不想创造自己的外观和感觉 是的 有几种方法可以做到这一点 但我不知道有谁是真正简单的 看一下Nimbus Swing 的新面貌 ht
  • Math.pow(65,17) % 3233 的令人惊讶的结果

    由于某种原因 在处理大数时 模运算符没有给出正确的输出 请查看代码 double x Math pow 65 17 3233 输出应该是2790但输出是887 0 我确信这很愚蠢 但我无法绕过它 提前致谢 的结果Math pow 65 17
  • 部分代码覆盖率 C# - Nunit

    我有部分代码覆盖率 但我不知道为什么 对于在开始阅读之前喜欢这个问题的人 首先想说 第一篇文章 我的开发生涯还很初级 但我的学习速度相对较快 我认为 所以就这样吧 使用Junit进行测试 并基于MVP 待测试代码 void view Del