- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现有几个基于此主题的问题,但我有一些我正在努力解决的具体示例。我希望有人可以在这里帮助我,因为我是测试驱动开发和单元测试的新手。
(我不确定这是否重要,但我正在使用 C# 和 .NET Framework 4.0 并使用 Microsoft 的内置测试框架)
首先,是否值得测试非常简单的代码块?例如,对于我的一个类,我有一个 Fill 方法,它接受 10 个参数,并根据这些参数设置类中 10 个属性的值。填充代码实际上只是一系列值设置语句。我读过,一个好的单元测试应该只断言一件事,但在我看来,为了检查所有这些值是否都已正确设置,我必须断言 10 件事。因此,要么我根本无法测试它,相信代码足够简单,要么编写 10 个不同的单元测试来检查每个属性。这些是否正确?
第二个例子。我有一段代码,它多次调用类的私有(private)方法,最后调用 Web 服务向用户发送电子邮件。我知道我应该为电子邮件服务注入(inject)一个模拟 Web 服务,这样我就不会测试多个类,但是我应该如何测试所有这些私有(private)方法和电子邮件调用是否已进行?
第三个示例与最后一个示例类似。我的类结构看起来像这样:
Controller --- 取决于 ---> IWidget(某些业务对象) && IDataProviderDataProvider(Implements IDataProvider) --- 取决于 ---> WebServiceWebService --- 直接调用 ---> 数据库
现在我对 Controller 进行了单元测试(注入(inject)模拟小部件和数据提供程序)。所以这一切都很好。我还对 Widget 进行了单元测试,没有出现任何问题。
问题归结于 DataProvider 和 WebService。此特定实例中的 WebService 除了传递数据提供者的请求并传回数据(由于物理架构限制)之外什么也不做。
我在对 DataProvider 进行单元测试时遇到了麻烦,因为我不确定如何注入(inject)模拟 Web 服务。我还不确定对 DataProvider 进行单元测试是否值得,因为我最终不得不在大量模拟数据集中编写代码来测试值。同样,我不确定如何对 Web 服务进行单元测试,因为在本例中 Web 服务的主要功能取决于数据库。再说一遍,这值得测试吗?如果 WebService 除了充当传递之外还做了更多事情,但仍然依赖于数据库怎么办?
我非常感谢任何人在这方面提供的任何建议。非常感谢。
最佳答案
I've read that a good unit test is supposed to only assert one thing, but it seems to me in order to check that all those values have been set correctly I would have to assert 10 things. So either I can not test it at all, trusting that the code is simple enough, or write 10 different unit tests to check each property.
我想说,一个好的单元测试应该测试一个
故事或
用例
场景,这确实可以涉及多个断言。
如果该方法涉及 10 个分配,确实有可能其中一些分配被搞乱,名称拼写错误等,因此单元测试为其(小)价格提供了值(value)。
I have a block of code that makes several calls to a class's private methods and finally calls a web service to fire off an email to a user. I understand that I should inject a mock web service for the email service so that I'm not testing multiple classes, but how should I test that all those private methods and that email call have been made?
这称为感知,即感知您调用的电话的结果/副作用。答案取决于这些私有(private)方法的实际用途。如果他们组装一些数据最终进入邮件消息,则可以通过消息内容进行测试。如果它们以可以从外部检测到的方式改变对象的内部状态,您就可以验证它。如果这些都不是真的,那么甚至可能会出现这样的情况:这些私有(private)方法最好转移到单独的类的公共(public)接口(interface)中,以便可以对它们进行正确的单元测试。
I have trouble unit testing the DataProvider because I'm not sure how to go about injecting a mock web service. I'm also unsure if unit testing the DataProvider is worth while, because I'd wind up having to code in a lot of mocked up datasets just to test values.
我不一定想要对这些类进行单元测试,这些类实际上是外部组件的包装器。如果那里只有绝对最小量的逻辑,即所有(或最可能的)值得测试的代码都被移到其他可单元测试的类中,IMO 可以将这些类的测试留给集成/功能测试,测试连接到真实数据库、Web 服务等的整个(子)系统。
关于.net - 有效的单元测试覆盖率(以及实际应该测试什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641115/
在旧版 Web 应用程序中,我们没有对 javascript 部分进行任何单元测试。 我们希望提高代码质量并删除死代码。 有什么方法可以在人工测试期间在浏览器中进行逐行 Javascript 代码覆盖
我已经为我的 python 代码编写了测试,并且想检查测试覆盖了多少百分比,所以我决定使用 python 覆盖。但是我启动它时遇到问题。我用这个 bash 命令启动我的测试: export PYTHO
我正在使用 python 覆盖工具来运行我的单元测试。从结果中可以看出,它包括所有“站点包”。我怎样才能将它们排除在报告之外?我只想显示项目源代码的报告。 (ctrp) ubuntu@ubuntu-x
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我有一个 python 项目,我使用: pipenv 毒性 pytest 还有更多。 基本上,我想将 tox 添加到我的 gitlab 管道中。几乎一切似乎都有效,从 tox 调用 mypy、flak
我使用Coverity来分析代码C。 配置命令: cov-configure --compiler /opt/toolchains/stbgcc-4.5.4-2.9/bin/mipsel-linux-
是否可以在运行时测量 python 代码覆盖率并在生成结果时查看结果?我尝试使用 coverage但找不到有帮助的选项。我最初的实验表明,.coverage 文件直到程序执行结束才被保存,这意味着我们
我有一个文件,test_basic.py: class TestCalculator(): def test_calculator(self): from basic impo
我有一个小型 PHP 项目,它使用 PHPUnit 进行单元测试和覆盖。我想生成 cobertura XML 格式的覆盖率报告。 我可以使用任何工具或插件来实现这一目标吗? 感谢任何帮助.. 最佳答案
我正在研究一个小 gem 并包含 simplecov到 spec_helper.rb 两行: require 'simplecov' SimpleCov.start 当我运行 rspec 测试时,si
go -cover 或 -coverprofile 在运行 go 测试时非常有用,并且可以在 html 或纯文本中很好地显示。但是是否有 api 以编程方式访问它或处理文件? 最佳答案 你可以试试ax
当我遇到代码覆盖问题时,我目前开始在 PHPUnit 中使用 strict 模式: 如果我使用setUp-方法创建我的类的新实例,__constructor-方法在我运行测试。 这是我的测试设置: p
我正在运行 EclEmma,它是 Eclipse 的 Emma 插件,覆盖率报告仅显示我定义的 Enum 的部分覆盖率,即使它显示 Enum 中唯一的值被覆盖。我假设支持 Enum 的隐含方法存在覆盖
我正在将 ANT 构建转换为 Maven。我不使用声纳。 在 Maven 中,Jacoco 似乎没有报告有关单元测试本身的覆盖率,而 ANT 则报告了。我也一直在尝试为我的 Maven 构建获取这个,
我正在努力为我正在处理的库实现 100% 的代码覆盖率,但我似乎对 switch 语句和覆盖率有一些问题,我根本不明白。 我目前使用的是 Jacoco 0.7.2,因为每个新版本似乎都与 Robole
有没有在intelliJ中不用浏览器运行代码覆盖率的方法? http://www.jetbrains.com/webstorm/webhelp/monitoring-code-coverage-for
我想确保我的 Django 测试套件涵盖我的 URL 配置中列出的所有 URL。有没有办法将 URL 配置中的列表与测试套件中命中的 URL 列表进行比较? 最佳答案 我能够通过定义自定义测试套件运行
哇,好乱啊。这是场景。 主干驱动的 JS 应用。 用于 AMD 功能的 RequireJS,初始化如下: 然后在 main.js 中添加以下配置代码: require.config( { p
我的问题很简单,但答案仍然难以捉摸。假设我有一个包裹 package mypackage func DoTheThing() int { return 5 } 现在假设我在 mypackage_t
我是一名优秀的程序员,十分优秀!