我最近继承了一个由不同人在不同时间编写的应用程序,并寻求如何标准化的指导。
答案 0 :(得分:8)
假设NUnit:
[Test]
public void ObjectUnderTest_StateChanged_Consequence()
{
Assert.That(tra_la_la);
}
[Test]
public void ObjectUnderTest_Behaviour_Consequence()
{
Assert.That(tra_la_la);
}
例如:
[Test]
public void WifeIsTired_TakeWifeToDinner_WifeIsGrateful()
{
Assert.That(tra_la_la);
}
[Test]
public void WifeIsTired_MentionNewGirlfriend_WifeGetsHalf()
{
Assert.That(tra_la_la);
}
答案 1 :(得分:5)
我只是写出它的用途。这不像你必须在其他任何地方输入名称,所以拥有testWibbleDoesNotThrowAnExceptionIfPassedAFrobulator
不是问题。显然,任何测试都以“测试”开始。
答案 2 :(得分:2)
特别关注BDD(行为驱动开发)和this blog post是有益的。
BDD主要关注组件及其应该做什么。因此,它直接影响您如何命名/构建测试,以及它们用于设置条件和验证的代码。 BDD不仅允许开发人员读/写测试,而且团队的非技术成员(业务分析师等)可以通过指定测试并验证它们来做出贡献。
答案 3 :(得分:2)
没有这样的标准,不同的人/地方会有不同的方案。重要的是你坚持标准。
我个人非常喜欢以下 - C#中的示例代码,但非常接近Java,同样的规则适用:
[Test]
public void person_should_say_hello()
{
// Arrange
var person = new Person();
// Act
string result = person.SayHello();
// Assert
Assert(..., "The person did not say hello correctly!");
}
<强>显强>
测试名称应该给出被测试类的名称。在此示例中,正在测试的类是Person
。测试名称还应具有正在测试的方法的名称。这样,如果测试失败,你至少会知道在哪里解决它。我还建议遵循AAA - Arrange, Act, Assert规则,这将确保您的测试易于阅读和遵循。
友好失败消息
当声明结果/状态时,包含可选消息很有用。这使得测试失败时更容易,特别是在作为构建过程的一部分或通过外部工具运行时。
<强>下划线强>
我遵循的最后(虽然是可选的)姿势是使用下划线来表示测试名称。虽然我不喜欢生产代码中的下划线,但是它们在测试名称中的使用非常有用,因为测试名称通常要长得多。快速浏览使用下划线的测试名称证明更具可读性,尽管这是主观的,并且是关于单元测试实践的争论的来源。
整合测试
相同的标准适用于集成测试,唯一的区别是此类测试的位置应与单元测试分开。在上面的示例代码中,测试类将被称为PersonTests
,并位于名为PersonTests.cs
的文件中。集成测试将以类似的方式命名 - PersonIntegrationTests
,位于PersonIntegrationTests.cs
。同一个项目可以用于这些测试,但要确保它们位于不同的目录中。
答案 4 :(得分:1)
我遇到了两个很好的建议。链接在这里:http://slott-softwarearchitect.blogspot.com/2009/10/unit-test-naming.html
http://weblogs.asp.net/rosherove/archive/2005/04/03/TestNamingStandards.aspx
答案 5 :(得分:1)
在那种情况下,我可能会找到最常用的命名约定,并重构其余的代码来使用它。如果使用最多的那个真的很可怕,我仍然会查看现有的代码,并尝试找到一个我可以忍受的代码。一致性比任意约定更重要。
答案 6 :(得分:1)
我使用FunctionTestCondition
构造。如果我有两个方法Get
和Set
,我可能会创建以下测试方法:
GetTest
是一个积极的测试(一切都好)。GetTestInvalidIndex
测试传递给方法的无效索引。GetTestNotInitialized
用于测试数据在使用前的输入时间。SetTest
SetTestInvalidIndex
SetTestTooLargeValue
SetTestTooLongString
答案 7 :(得分:0)