我试图确定在编写要在vstest.console.exe
.
示例 1:假设我有两个测试都依赖于MyClass.Singleton.Counter
零值。现在假设我们聘请了一位新实习生,他在他编写的测试中无意中增加了该值。如果这个新测试在旧的两个单元测试之前运行。如果测试在同一个进程中运行,这两个单元测试将失败(并且没有重置计数器值)。
示例 2:假设我有两个针对同一个数据库的集成测试。这两个测试都记录数据库中存在的计数器的值,递增计数器,然后从数据库中读取计数器,断言它的值比最初读取时高 1。如果这两个测试并行运行,我们就有了竞争条件。
最终目标是尝试理解开发人员在编写特定运行的测试时应该牢记的注意事项vstest.console.exe
,它的执行模型是什么?
注意:我对最佳实践不感兴趣,只对vstest.console.exe
影响测试结果的方式的执行模型感兴趣。
相关考虑:
- 如果
project1.dll
和project2.dll
被传递到控制台,并且每个都对依赖程序集的冲突版本有依赖关系,那么项目测试文件将如何成功执行? - 每个测试文件(即dll)是否都有自己的进程?
- 每个测试文件(即 dll)是否在单个进程中都有自己的 AppDomain?
- 执行每个测试文件的当前工作目录是什么?
- 测试是串行执行还是并行执行?
- 测试执行顺序是否确定?
- 不同的测试适配器对相关行为有多少控制?
.runsettings
未指定文件或测试适配器时的默认行为是什么?
相关背景资料:
(1) vstest.console.exe 文档/InIsolation
声明它“在一个独立的进程中运行测试” 。
我会从上面推断出创建了一个进程,在该进程中传递给测试运行器的所有测试文件都将执行,但这可能不准确。
(2)vstest.console.exe
可以在命令行上取多个测试“文件”,它们是DLL,可能会引用不同目录下的不同项目。
(3) 通过提供*.runsettings
文件,可以使用测试适配器来执行测试。