Unit testing 我应该记录我的单元测试方法吗?

Unit testing 我应该记录我的单元测试方法吗?,unit-testing,tdd,Unit Testing,Tdd,如前所述,单元测试方法文档只能由能够访问源代码的人员查看。值得为此付出努力吗 所谓文档,我指的是(但更具描述性): // ///对SomeClass.SomeMethod的测试 /// [TestMethod()] 公共方法测试() { } 我更倾向于说,您应该以一种能够表达测试内容的方式命名您的测试方法:当使用这些参数调用时,某些方法将以这种方式运行(),尽管有些人可能会发现这一点有争议。您应该记录所有代码 对于单元测试,我通常会说我正在测试什么,和它是如何测试的。将“testforclass

如前所述,单元测试方法文档只能由能够访问源代码的人员查看。值得为此付出努力吗

所谓文档,我指的是(但更具描述性):

//
///对SomeClass.SomeMethod的测试
///
[TestMethod()]
公共方法测试()
{
}

我更倾向于说,您应该以一种能够表达测试内容的方式命名您的测试方法:
当使用这些参数调用时,某些方法将以这种方式运行()
,尽管有些人可能会发现这一点有争议。

您应该记录所有代码


对于单元测试,我通常会说我正在测试什么,和它是如何测试的。将“testforclass.someMethod”放在这里并没有多大帮助。

单元测试的目的应该是自我描述,但总会有一些情况下无法实现这一目标,因此需要对编写的内容进行描述

换句话说,试着做单元测试,这样他们就不需要文档,但是如果他们需要文档,就写吧

哦,是的


即使“能够访问源代码的人”永远不会是你以外的任何人,一年后(甚至一个月后)看它的人也不会是你,相信我:-)

我认为记录单元测试很好,我的主要原因是你可以解释为什么要测试特定的功能。我的单元测试往往以各种奇怪的极端或意外的参数结束


如果测试失败,未来的程序员(或内存不好的您)会知道测试/实现功能的原因。

是。测试可能看起来是自我记录的,但有时为了生成有意义的测试数据,您必须经历的复杂过程意味着,对于最终的维护人员来说,一切可能都不是很明显,他们可能就是您!让您的生活更轻松-记录您的代码。

单元测试应该足够简单,足够详细,以便易于理解。 如果您需要对单元测试进行注释,也许您应该更改它的名称, 或者你应该把它重构成更小的方法

重构测试是一个很好的实践,实际上您必须重构您的测试,否则它们将无法维护


在我看来,注释几乎总是一种迹象,表明您应该重构需要注释的代码。适用于生产代码的内容适用于测试代码。

大多数单元测试不需要文档。名称应明确说明他们测试的方法,并给出预期结果的指示。代码应该简单明了。单元测试不应该实现业务规则,因此记录“为什么”通常是不必要的


在极少数情况下,测试必须足够复杂以保证注释,它们应该像任何其他代码一样被记录

对于MSTest(IDK,如果NUnit有类似的东西),每个测试方法的DescriptionAttribute都很有用,因为它们会显示在Visual Studio的测试结果面板上。当它出现时,比命名约定更具可读性。

我发现单元测试输出的消息在运行时通常足够了。例如,在Perl中:

is(compare_bitstrings($bs1, $bs2, $gen), 1, 'compare_bitstrings - bs1 > bs2');
给予


当运行成功时。这告诉了我我要做什么,以及答案应该是什么。

是的。我认为编写单元测试文档是一个好主意的原因是,在开发过程中,如果您不仅修改了生产类的API,而且修改了导致某些测试失败的某些内部行为,那么就可以节省相当多的时间来浏览测试代码,阅读单元测试文档,并确定鉴于您最近的行为改变,您是否预期测试会失败,或者可能发生了更微妙的事情

如果没有这些文档,您将不得不从测试的名称和注释/代码中找出测试的作用


请注意,如果您只是想在文档中重写单元测试的名称,那么这不是很有用,我坚持只给单元测试一个描述性名称(即文档应该比单元测试的名称更详细)

绝对!!您的单元测试应该和您的实际代码一样被记录在案。如果不是因为不知道是您的代码还是您的测试有缺陷的常见情况以外的原因。

当我编写测试时,我倾向于为测试添加注释,后跟描述性的测试方法名称(如另一个答案注释中提到的S/S/R格式)因为这是我和我的开发人员在用C++开始CPPUnad时养成的习惯。当我涉猎C#时,Lucas在他的回答中提到的一点是很好的——当框架允许的时候,可以在源代码和结果中使用的描述字段非常方便,我倾向于使用注释格式,这种格式在很多地方都是可用的

尽管如此,我认为您需要了解您或您的开发团队通常如何处理代码注释。当代码被修复、重构时,人们会更新注释吗?项目是否更小,是否总是有少数几个紧密合作的开发人员

我所从事的项目规模较大,根据州的不同,可能由一个紧密合作的团队、一个远程团队或共同开发或完全移交给供应商来维护。在我的场景中,我们试图花时间在生产和测试代码中记录和维护文档,以供将来使用

但是,如果评论通常是事后诸葛亮,尽管这可能会让我感到痛苦,如果您的评论有可能与实际代码/测试脱节,那么尝试改变现状可能没有意义。

我认为“如果评论没有用,最好将其删除”。该文档主要用于prog
is(compare_bitstrings($bs1, $bs2, $gen), 1, 'compare_bitstrings - bs1 > bs2');
ok 74 - compare_bitstrings - bs1 > bs2
/// <summary>
/// Test MapRadioNameFromWave when input 104 should return "VOV English"
/// </summary>
public void Test_MapRadioNameFromWave_Input_104_ShouldReturnVOVEnglish() {
    // Test
}