我习惯于始终尝试将应用程序级代码与框架级代码区分开,所以我遇到了您经常描述的问题:您通常希望先测试所有框架级代码,然后再开始测试任何应用程序级代码。 。同样,即使在框架级别的代码中,所有其他框架模块也倾向于使用一些基础框架模块,如果在基础方面有些问题,那么测试其他任何东西实际上是没有意义的。
不幸的是,测试框架的提供者往往对如何使用其创作有一些僵化的想法,并且对这些想法持保护态度,而使用框架的人则倾向于接受预期的用法而不会提出质疑。这是有问题的,因为它扼杀了实验和创新。我不了解其他所有人,但我宁愿有自由尝试以一种奇怪的方式做某事,并亲自检查结果是否优于既定的方法,而不是没有自由去做。首先以我的方式做事。
因此,在我看来,测试依赖项将是一件令人敬畏的事情,而代替这一点,指定执行测试顺序的能力将是下一件最好的事情。
我发现解决排序测试问题的唯一方法是仔细命名,以便利用测试框架按字母顺序执行测试的趋势。
我不知道这在Visual Studio中是如何工作的,因为我还没有做任何涉及使用C#进行广泛测试的事情,但是在Java方面,它的工作方式如下:在项目的源文件夹下,我们通常有两个子文件夹,一个称为“ main”(包含生产代码),另一个称为“ test”(包含测试代码)。在“主”下,我们有一个文件夹层次结构,它与源代码的包层次结构完全对应。Java包大致对应于C#名称空间。C#不需要将文件夹层次结构与名称空间层次结构进行匹配,但是建议这样做。
现在,人们在Java世界中通常要做的是,在“ test”文件夹下,他们镜像在“ main”文件夹下找到的文件夹层次结构,因此每个测试都驻留在与它所测试的类完全相同的程序包中。其基本原理是测试类经常需要访问被测类的程序包私有成员,因此测试类需要与被测类在同一程序包中。在C#方面,没有名称空间本地可见性之类的东西,因此没有理由镜像文件夹层次结构,但是我认为C#程序员在构造其文件夹时或多或少遵循相同的原则。
无论如何,我发现允许测试类访问被测类的程序包本地成员的整个想法都是错误的,因为我倾向于测试接口,而不是实现。因此,测试的文件夹层次结构不必镜像生产代码的文件夹层次结构。
因此,我要做的是,将测试的文件夹(即软件包)命名为:
t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...
这保证了对“ SomeSubsystem”的所有测试将在对“ SomeOtherSubsystem”的所有测试之前执行,而依次对所有“ AndYetAnotherSubsystem”的测试之前执行,依此类推。
在文件夹中,各个测试文件的命名如下:
T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java
当然,现代的IDE具有强大的重构功能将极大地帮助您,只需单击几下鼠标,便可以重命名整个程序包(以及所有子程序包以及引用它们的所有代码)。