UnitTest如何组织测试文件?

时间:2008-11-19 13:09:24

标签: c# java c unit-testing

目前,我正按分组(项目)拆分所有测试。因此,如果我有12个项目,我将为单元测试创​​建另外1个项目,其中12个类将测试我的所有包。

你是按照同样的方式做的,还是按班级进行1次测试?你如何组织所有考试?

11 个答案:

答案 0 :(得分:6)

在Java / Maven环境中:

project/src/main/java/Package/Class.java
project/src/test/java/Package/ClassTest.java
project/src/main/resources/Package/resource.properties
project/src/test/resources/Package/test_resource.properties

答案 1 :(得分:4)

因为我倾向于做TDD,所以每个类都有一个测试类,并将这些测试类分组为一个测试项目与实际项目的匹配。根据解决方案的大小,测试项目可以存在于同一解决方案中(如果很小),也可以分解为单独的解决方案(如果更大)

答案 2 :(得分:4)

和Pokus一样,我的测试与要测试的类在同一个程序集中,所以我可以测试内部和私有。

在C#中你有Debug和Release版本,我用编译器指令UNITTEST添加另一个叫UnitTest。然后我可以在测试类的顶部添加指令(#if UNITTEST),这样当我编译Debug或Release时,测试不会编译,但是当我编译UnitTest时,它们就是。

我添加一个名为Tests的文件夹,其中包含我的测试类。 Class1.cs有一个测试类Tests \ Class1UnitTest.cs。

也许更好的方法,但这对我有用。

答案 3 :(得分:3)

我们有这样的组织(C ++):

package/Class.cpp
package/Class.hpp
package/test/ClassUnitTest.cpp
package/test/ClassIntegrationTest.cpp
test/unit-test/main.cpp
test/integration-test/main.cpp
test/data
test/tmp

unit-test integration-test 只是测试运行者, test / data 包含集成使用的数据文件tests和 test / tmp 保存由相同测试创建的临时文件,并为每个测试套件清除。

答案 4 :(得分:1)

我将我的单元测试保存在他们测试的项目中的包中。这样,所有测试都会通过应用程序代码检出版本控制。单元测试目录基本上是源目录的镜像,因此两者之间的包结构是相同的。

作为一个例子(不是我的真实包名):

src.com.app
src.com.app.model
src.com.app.view
src.com.app.controller

tests.com.app
tests.com.app.model
tests.com.app.view
tests.com.app.controller

答案 5 :(得分:1)

我的课程中有我的测试课程。这样我可以测试内部的东西。我将“测试”后缀添加到类名中。示例:MyClass.cs将是MyClassTest.cs

答案 6 :(得分:1)

我喜欢让我的src和测试存在于同一个包中。所以我组织我的如下:

src/com/company/package/Class.java
testsrc/com/company/package/ClassTest.java

答案 7 :(得分:1)

我将它们保存在整个产品的单独包装中。我不喜欢用单元测试代码弄乱生产代码。

Company/Product/Package1
Company/Product/PackageN
Company/Product/UnitTest/Package1/Class/Method1Fixture.cs
Company/Product/UnitTest/Package1/Class/MethodNFixture.cs
Company/Product/UnitTest/PackageN/Class/Method1Fixture.cs
Company/Product/UnitTest/PackageN/Class/MethodNFixture.cs

我的所有方法都被声明为公共虚拟,我也使用了很多模拟。当然,这主要来自这样一个事实,即我单元测试的软件包通常是业务逻辑和数据层,因此它们很少有真正的内部方法。但我确实有一些项目有“内部”方法。对于那些,如果它们是内部公司代码,那么对所有方法使用public不是问题。我相信如果你不想公开所有的方法,你可以使用强命名的程序集并进行设置,以便单元测试程序集可以访问内部方法。最后,我有一个单元测试组件,它将包含整个项目的所有测试装置。

答案 8 :(得分:0)

我们做一对一的测试程序集(C#)。对于解决方案中的每个装配,我们都有相应的测试项目。每个项目都对相应项目中的每个类进行测试。

例如:

Company.Product.Feature
ClassnameAlpha
ClassnameBeta
ClassnameDelta

Company.Product.Feature.UnitTests
ClassnameAlphaTests
ClassnameBetaTests
ClassnameDeltaTests

我接受了xando做得更多的事情。我没有使用默认的调试/发布配置,而是为Team Foundation Server中用于构建配置的每个分支配置了一个配置。所以,我有开发,集成和生产。在没有考虑到麻木无聊的细节的情况下,单元测试是为开发和集成配置而构建的。它们包含在Production分支中,但不是使用构建编译的。包含它们的原因是当我们必须从生产分支(例如,修补程序)时,可以使用修改后的代码运行,修改和反向集成单元测试。

我们目前只有一小部分团队使用此功能,因为我们正在从旧产品和版本控制系统迁移,但到目前为止它运作良好。到目前为止,它的单元测试方面效果特别好。

答案 9 :(得分:0)

我喜欢让他们接近他们支持的代码,通常是在一个单独的子目录中。这样我就可以让他们使用代码进行编译,这使得它们可见 - 当只有少数组件进行单元测试时,遗留项目非常重要。

 .../component/src/
              /include/
              /doc/
              /bin/
              /test/

我们通常每个二进制文件有一个套件,但这有例外。我们可以使用简单的命令在任何目录下运行所有​​测试。

拇指规则是让单元测试易于查找,易于编译和易于运行,这样他们就不会陷入困境。

答案 10 :(得分:0)

我按照测试类别组织我的测试。如果我的所有单元测试文件都在1目录中。所有集成在1个目录中。我在另一个中进行了所有持久性测试。所有文件夹都有许多文件用于测试每个类似的东西。