我的组织单元测试的电流的方式归结为以下几点:如何组织单元测试并不重构恶梦?
- 每个项目都有单元测试自己的专用项目。对于项目
BusinessLayer
,有一个BusinessLayer.UnitTests
测试项目。 - 对于我想测试的每个类,测试项目中都有一个单独的测试类,它们放置在与测试类完全相同的文件夹结构和完全相同的名称空间内。对于来自命名空间
BusinessLayer.Repositories
的类CustomerRepository
,在命名空间BusinessLayerUnitTests.Repositories
中存在测试类CustomerRepositoryTests
。
每个测试类中的方法遵循简单的命名约定MethodName_Condition_ExpectedOutcome
。因此,包含测试一类CustomerRepository
与定义的Get
方法的类CustomerRepositoryTests
如下所示:
[TestFixture]
public class CustomerRepositoryTests
{
[Test]
public void Get_WhenX_ThenRecordIsReturned()
{
// ...
}
[Test]
public void Get_WhenY_ThenExceptionIsThrown()
{
// ...
}
}
这种做法一直担任我非常好,因为它使一些一段代码非常简单的定位测试。在对面的网站,它使代码重构真的更难,那么它应该是:
- 当我决定将一个项目拆分成多个较小的项目时,我还需要拆分我的测试项目。
- 当我想要改变一个类的命名空间时,我必须记住改变一个测试类的命名空间(和文件夹结构)。
- 当我更改方法的名称时,我必须通过所有测试并在那里更改名称。当然,我可以使用搜索&替换,但这不是很可靠。最后,我仍然需要手动检查更改。
有没有组织单元测试将仍然允许我在同一时间快速定位测试特定的代码和更借本身对重构的一些巧妙的方式?
另外,有一些,嗯,也许Visual Studio的扩展,这将让我莫名其妙地说:“嘿,这些测试是是方法,所以当的方法改变名称,请如此种类和改变测试以及“?说实话,我认真考虑自己写这样的东西:)
你如何命名您的测试方法?它们是否包含您正在测试的方法的名称? – 2012-07-20 18:46:13
@UfukHacıoğulları是的,他们这样做。在这个问题中,我提到了这些名字遵循的确切约定。 – 2012-07-20 18:49:15