Nunit 为什么选择testFixture而不是TestClass?

Nunit 为什么选择testFixture而不是TestClass?,nunit,Nunit,组织单元测试有三种方法:按夹具、类或特性进行测试。但TestClass的NUnit属性称为TestFixture。有什么历史原因吗?既然你问起了,我只是查了一下。 测试夹具是在运行测试之前必须建立的固定基线状态,因此结果是可预测和可重复的。在单元测试框架中,我们使用SetUp和TearDown属性/方法来创建/销毁测试设备(例如,使用正确的对象初始化实例变量)。主要的历史原因是NUnit从JUnit开始作为一个直接端口使用,JUnit称之为测试设备 NUnit1.0比我的时代早,但我被告知它是通

组织单元测试有三种方法:按夹具、类或特性进行测试。但TestClass的NUnit属性称为TestFixture。有什么历史原因吗?

既然你问起了,我只是查了一下。

测试夹具是在运行测试之前必须建立的固定基线状态,因此结果是可预测和可重复的。在单元测试框架中,我们使用SetUp和TearDown属性/方法来创建/销毁测试设备(例如,使用正确的对象初始化实例变量)。

主要的历史原因是NUnit从JUnit开始作为一个直接端口使用,JUnit称之为测试设备

NUnit1.0比我的时代早,但我被告知它是通过将JUnit中的所有.java文件重命名为.cs文件并尝试编译而开始的。从那里修复了它,并添加了一个UI。当我加入NUnit 2.0时,NUnit 1.0中仍然有一个名为
IsVisualAgeForJava
的方法,因为JUnit当时对此有特殊的行为


在NUnit2.0中,我们的目标是使NUnit更具网络性。所以我们添加了属性和其他一些东西。我们所有人都有java背景,并与JUnit合作多年。使用
[TestFixture]
似乎很自然,我尊重Mike Two的回答,但我要断言NUnit团队的理解是非常错误的,使用
[TestFixture]
是NUnit脸上的一个语义疣。测试类不是固定装置。从我对JUnit的深入了解中,我没有发现任何将测试类作为测试夹具的引用,也没有发现关于“测试夹具”引用测试类的讨论。相反,JUnit/xUnit关于fixture的所有讨论都与setup和teardown有关,当然,这是用于设置实际测试fixture的常用方法

注意,在NUnit 2.5中,可以删除[TestFixture]注释

更新:(2012年7月)

我正在读《黄瓜》一书,在第99页,作者马特·韦恩解释了使用“夹具”的由来。我引用:

将测试系统和被测系统之间的链接称为夹具有着悠久的传统(来自测试夹具起源的硬件世界)。这就是我们在本书中称之为自动化代码的“粘合代码”角色。FIT测试框架使用这个术语的含义。 一些单元测试工具(如NUnit)将测试用例类本身称为夹具,从而进一步混淆了这个问题。这是一种无处不在的语言!(Wynne&Hellesoy,2012年)


我同意你的看法。这是一个错误。一旦它到了那里,就很难收回。然而,我确实认为当时JUnit中也有类似的行为。我可能完全错了。这一切都发生在2002年初,我可能记错了。不管怎样,你的断言是正确的,测试类和固定装置是不同的东西。谢谢Mike Two,我总是对我们工艺中项目背后的历史故事感兴趣。我也意识到,如果我不喜欢它,我不应该抱怨,而应该提交一个补丁。我只是想知道我是不是太学究了,因为到目前为止还没有人对NUnit做过这样的修改。我考虑过几次修改。我遇到了很多向后兼容的问题。几年前我停止了正常的NUnit工作,所以我不打算在将来改变它。