命名单元测试类和测试方法的最佳实践是什么?
这在之前的SO中讨论过,在什么是单元测试的一些流行命名约定?
我不知道这是否是一种非常好的方法,但目前在我的测试项目中,我在每个生产类和测试类之间都有一对一的映射,例如Product和ProductTest。
在我的测试类中,我有我正在测试的方法的名称,一个下划线,然后是情况和我期望发生的事情,例如Save_ShouldThrowExceptionWithNullName()。
命名单元测试类和测试方法的最佳实践是什么?
这在之前的SO中讨论过,在什么是单元测试的一些流行命名约定?
我不知道这是否是一种非常好的方法,但目前在我的测试项目中,我在每个生产类和测试类之间都有一对一的映射,例如Product和ProductTest。
在我的测试类中,我有我正在测试的方法的名称,一个下划线,然后是情况和我期望发生的事情,例如Save_ShouldThrowExceptionWithNullName()。
当前回答
Kent Beck建议:
每个“单元”(程序的类)一个测试夹具。测试fixture本身就是类。测试夹具的名称应该是: [您的“单元”名称]测试 测试用例(测试夹具方法)的名称如下: 测试[正在测试的功能]
例如,拥有以下类:
class Person {
int calculateAge() { ... }
// other methods and properties
}
测试夹具应该是:
class PersonTests {
testAgeCalculationWithNoBirthDate() { ... }
// or
testCalculateAge() { ... }
}
其他回答
看到的: http://googletesting.blogspot.com/2007/02/tott-naming-unit-tests-responsibly.html
对于测试方法名称,我个人认为使用详细的和自文档化的名称非常有用(以及进一步解释测试正在做什么的Javadoc注释)。
Kent Beck建议:
每个“单元”(程序的类)一个测试夹具。测试fixture本身就是类。测试夹具的名称应该是: [您的“单元”名称]测试 测试用例(测试夹具方法)的名称如下: 测试[正在测试的功能]
例如,拥有以下类:
class Person {
int calculateAge() { ... }
// other methods and properties
}
测试夹具应该是:
class PersonTests {
testAgeCalculationWithNoBirthDate() { ... }
// or
testCalculateAge() { ... }
}
我认为最重要的事情之一是保持命名约定的一致性(并与团队的其他成员一致)。很多时候,我看到在同一个项目中使用了大量不同的约定。
我喜欢这样的命名风格:
OrdersShouldBeCreated();
OrdersWithNoProductsShouldFail();
等等。 它让非测试人员清楚地知道问题所在。
在VS + NUnit中,我通常在项目中创建文件夹,将功能测试分组在一起。然后我创建单元测试fixture类,并以我正在测试的功能类型命名它们。[Test]方法按照Can_add_user_to_domain命名:
- MyUnitTestProject
+ FTPServerTests <- Folder
+ UserManagerTests <- Test Fixture Class
- Can_add_user_to_domain <- Test methods
- Can_delete_user_from_domain
- Can_reset_password