gpt4 book ai didi

c# - 如何强制类为每个公共(public)方法获取单元测试?

转载 作者:行者123 更新时间:2023-11-30 15:24:53 26 4
gpt4 key购买 nike

我们现在开始使用单元测试来大大提高我们的代码质量,(当然)还有其他不同的原因。遗憾的是我们来晚了,所以我们有大约 50 个方法的类,这些方法直到现在都还没有经过测试。而且我们有很多类(class)!

是否可能/如何可能:
a) 查看哪些方法未经测试?
b) 强制向类添加方法的开发人员为其编写单元测试(例如,我测试了所有 50 个方法,明天有人添加了 51 个方法)?
c) 当方法未经测试时发出警告或错误?

最佳答案

a) 查看哪些方法未经测试?

这对于 Code Coverage 来说相当容易工具。 Visual Studio 内置了一个选项,但还有其他选项。

b) 强制向类添加方法的开发人员为其编写单元测试(例如,我实现了测试所有 50 个方法,明天有人添加了 51 个方法)?

不要根据覆盖率制定硬性规定!

所有经验(包括我的经验)都表明,如果您设置硬代码覆盖率目标,您将获得的唯一结果是开发人员将开始玩弄系统。结果将是更糟糕的代码。

这是一个例子;考虑这个 Reverse 方法:

public static string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}

您可以编写单个测试来获得此方法的 100% 覆盖率。然而,正如这里给出的那样,实现是脆弱的:如果 snull 会发生什么?该方法将抛出一个 NullReferenceException

更好的实现是检查 s 是否为 null,并添加一个分支来处理这种情况,但除非您为其编写测试,否则代码覆盖率会下降.

如果您有不想编写测试的开发人员,但您需要一个硬代码覆盖率目标,那么这些开发人员将保留 Reverse 功能,而不是对其进行改进。

我在野外见过这样的系统博弈。如果您在没有开发人员支持的情况下制定规则,这将会发生。

您需要教导开发人员,如果他们添加良好的单元测试,他们的工作将如何变得更轻松。

一旦开发人员理解了这一点,他们就会自己添加测试,而您不需要任何规则。

只要开发人员不理解这一点,该规则只会对您造成更大的伤害,因为您从中获得的“测试”将在不理解的情况下编写。

c) 在方法未经测试时发出警告或错误?

如上所述,如果用于绝对指标,代码覆盖率是一个很差的工具。另一方面,如果您开始监控趋势,它会很有用。

一般来说,代码覆盖率应该增加,直到它达到某个平台,在这个平台上增加它是不切实际的。

有时,它甚至可能会下降,这没关系,只要有充分的理由。监控覆盖率趋势会告诉您覆盖率何时下降,然后您就可以进行调查。有时,有充分的理由(例如当有人添加 Humble Object 时),但有时没有,您需要与负责删除的开发人员交谈。

关于c# - 如何强制类为每个公共(public)方法获取单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176316/

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