gpt4 book ai didi

.net - 有效的单元测试覆盖率(以及实际应该测试什么?)

转载 作者:行者123 更新时间:2023-12-02 06:16:05 25 4
gpt4 key购买 nike

我发现有几个基于此主题的问题,但我有一些我正在努力解决的具体示例。我希望有人可以在这里帮助我,因为我是测试驱动开发和单元测试的新手。

(我不确定这是否重要,但我正在使用 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/

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