vstest.console.exe执行模型和隔离行为

Kal*_*son 10 .net execution isolation vstest vstest.console.exe

我正在尝试确定在编写将要运行的测试时应该考虑的因素vstest.console.exe.

示例1:假设我有两个测试,它们都依赖于MyClass.Singleton.Counter零值.现在让我们说我们雇用一个新的实习生,在他写的测试中无意中增加了这个值.如果这个新测试在旧的两个单元测试之前运行.如果测试在同一个过程中运行(并且没有重置计数器值),那么这两个单元测试将失败.

示例2:假设我有两个集成测试,它们使用同一个DB.这两个测试都记录了DB中存在的计数器的值,递增计数器,然后从DB读取计数器,断言它的值比最初读取的值高1.如果这两个测试并行运行,我们就会遇到竞争条件.

最终目标是尝试理解开发人员在编写将在vstest.console.exe特定情况下运行的测试时应该记住的注意事项,它的执行模型是什么?

注意:我对最佳实践不感兴趣,只是了解vstest.console.exe影响测试结果的方式的执行模型.

相关注意事项:

  1. 如果project1.dll并且project2.dll传递给控制台,并且每个都依赖于依赖程序集的冲突版本,那么项目测试文件将如何成功执行?
  2. 每个测试文件(即dll)都有自己的进程吗?
  3. 每个测试文件(即dll)是否在单个进程中给出了自己的AppDomain?
  4. 每个测试文件执行的当前工作目录是什么?
  5. 测试是连续执行还是并行执行?
  6. 测试执行顺序是否确定?
  7. 不同的测试适配器对相关行为有多少控制?
  8. 没有.runsettings指定文件或测试适配器时的默认行为是什么?

相关背景资料:

(1)vstest.console.exe文档,/InIsolation指出它"在一个独立的进程中运行测试".

我将从上面推断出创建一个进程,其中传递给测试运行器的所有测试文件都将执行,但这可能不准确.

(2)vstest.console.exe可以在命令行上使用多个测试"文件",这些DLL可以引用不同目录中的不同项目.

(3)通过提供*.runsettings文件,可以使用测试适配器来执行测试.