我试图确定在编写将在vstest.console.exe
下运行的测试时应该考虑的因素。
示例1 :让我们说我有两个测试,这两个测试都依赖MyClass.Singleton.Counter
的值为零。现在让我们说我们聘请了一位新的实习生,在他写的测试中无意中增加了这个价值。如果这个新测试在旧的两个单元测试之前运行。如果测试在同一个过程中运行(并且没有重置计数器值),那么这两个单元测试将失败。
示例2 :假设我有两个针对同一个数据库的集成测试。这两个测试都记录了DB中存在的计数器的值,递增计数器,然后从DB读取计数器,断言它的值比最初读取的值高1。如果这两个测试并行运行,我们就会遇到竞争条件。
最终目标是尝试理解开发人员在编写将在vstest.console.exe
下运行的测试时应该记住的注意事项,它的执行模型是什么?
注意:我对最佳做法不感兴趣,只是在影响测试结果的方式中了解vstest.console.exe
的执行模型。
project1.dll
和project2.dll
传递给控制台,并且每个都依赖于依赖程序集的冲突版本,那么项目测试文件将如何成功执行?.runsettings
文件或测试适配器时的默认行为是什么?(1)/InIsolation
的{{3}}表明它"在一个孤立的过程中运行测试。"
我从上面可以推断出,创建了一个流程,其中传递给测试运行器的 ALL 测试文件将会执行,但这可能不准确。
(2)vstest.console.exe
可以接受多个测试"文件"在命令行上,这些DLL可能引用不同目录中的不同项目。
(3)通过提供*.runsettings
文件,可以使用测试适配器来执行测试。
答案 0 :(得分:0)
测试应该是相互独立的,你的例子1也告诉你为什么静态是糟糕的设计。
将静态更改为具有静态类生命周期的实例变量。可能所有依赖注入库都可以做到这一点。
在测试中,他们应该使用两个独立变量进行模拟,每个变量的初始值为0,以测试行为。
对于示例2,此处测试也应该是独立的。每个应该在测试套件/类 - [TestInitialize]
方法的开头准备DB,并恢复到[TestCleanup]
中的已知状态。