[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!");
}
特别是看看BDD(行为驱动开发)和this blog post是很有启发性的。 BDD本质上是关注组件和它们应该做什么。因此,它直接影响到您如何命名/构建测试,以及它们用于设置条件和验证的代码。BDD不仅允许开发人员读/写测试,而且团队的非技术成员(业务分析师等)也可以通过指定测试并验证它们来做出贡献。
8条答案
按热度按时间vsikbqxv1#
假设NUnit:
例如:
643ylb082#
我只是写它的目的。你不需要在其他地方输入名字,所以有一个
testWibbleDoesNotThrowAnExceptionIfPassedAFrobulator
不是问题。任何测试都以“测试”开头。brccelvz3#
没有这样的标准,不同的人/地方会有不同的计划。重要的是你要坚持一个标准。
就我个人而言,我是以下C#示例代码的粉丝,但非常接近Java,适用相同的规则:
显式
测试名称应该给予被测试类的名称。在这个例子中,被测试的类是
Person
。测试名称还应该包含正在测试的方法的名称。这样,如果测试失败了,您至少知道到哪里去解决它。我还建议遵循AAA - Arrange, Act, Assert规则,这将确保您的测试易于阅读和遵循。友好失败消息
在Assert结果/状态时,包含一个可选消息是很有用的。这使得测试失败时更容易,特别是作为构建过程的一部分或通过外部工具运行时。
下划线
我遵循的最后一种(尽管是可选的)立场是在测试名称中使用下划线。虽然我不喜欢在生产代码中使用下划线,但在测试名称中使用下划线非常有用,因为测试名称通常要长得多。快速浏览一个使用下划线的测试名称被证明是更易读的,尽管这是主观的,并且是关于单元测试实践的许多争论的来源。
集成测试
同样的标准也适用于集成测试,唯一的区别是这些测试的位置 * 应该 * 与单元测试分开。在上面的示例代码中,测试类将被称为
PersonTests
,并位于名为PersonTests.cs
的文件中。集成测试将以类似的方式命名-PersonIntegrationTests
,位于PersonIntegrationTests.cs
中。这些测试可以使用相同的项目,但要确保它们位于不同的目录中。de90aj5v4#
特别是看看BDD(行为驱动开发)和this blog post是很有启发性的。
BDD本质上是关注组件和它们应该做什么。因此,它直接影响到您如何命名/构建测试,以及它们用于设置条件和验证的代码。BDD不仅允许开发人员读/写测试,而且团队的非技术成员(业务分析师等)也可以通过指定测试并验证它们来做出贡献。
vjrehmav5#
在这种情况下,我可能会找到使用最多的命名约定,并重构其余代码以使用该命名约定。如果使用最多的代码确实很糟糕,我仍然会查看现有的代码,并尝试找到一个我可以接受的代码。一致性比武断的惯例更重要。
q35jwt9p6#
我使用
FunctionTestCondition
结构。如果我有两个方法,Get
和Set
,我可能会创建以下测试方法:GetTest
为阳性测试(一切正常)。GetTestInvalidIndex
来测试传递给该方法的无效索引。GetTestNotInitialized
测试数据在使用前未初始化。SetTest
SetTestInvalidIndex
SetTestTooLargeValue
SetTestTooLongString
twh00eeo7#
我发现了两个很好的建议。链接:
pgpifvop8#
按设置对测试进行分组,围绕此设置创建一个测试类,名称带有后缀Test或IntegrationTest。使用像JUnit或TestNG这样的测试框架,您可以根据需要命名您的测试方法。我会根据它所测试的内容来命名这个方法,使用 Camel 大小写的句子,而不是测试前缀。框架使用
@Test
注解将方法标记为test。