VSTest.Console.exe 执行模型和隔离行为

vstest.console.exe execution model and isolation behaviors

提问人:Kaleb Pederson 提问时间:3/4/2017 更新时间:3/12/2018 访问量:1915

问:

我正在尝试确定在编写将在 .vstest.console.exe

示例 1:假设我有两个测试,这两个测试都依赖于值为零。现在,假设我们雇用了一名新实习生,他在编写的测试中无意中增加了该值。如果此新测试在旧的两个单元测试之前运行。如果测试在同一进程中运行,则这两个单元测试将失败(并且不会重置计数器值)。MyClass.Singleton.Counter

示例 2:假设我有两个集成测试,它们命中了同一个数据库。这两个测试都记录数据库中存在的计数器的值,递增计数器,然后从数据库中读取计数器,断言其值比最初读取时高 1。如果这两个测试并行运行,则我们有一个竞争条件。

最终目标是尝试了解开发人员在编写将专门运行的测试时应牢记的注意事项,其执行模型是什么?vstest.console.exe

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

相关注意事项:

  1. 如果 和 传递到控制台,并且每个都依赖于依赖程序集的冲突版本,则项目测试文件将如何成功执行?project1.dllproject2.dll
  2. 每个测试文件(即dll)是否都有自己的进程?
  3. 每个测试文件(即 dll)是否在单个进程中为其提供自己的 AppDomain?
  4. 执行每个测试文件的当前工作目录是什么?
  5. 测试是串行执行还是并行执行?
  6. 测试执行顺序是否具有确定性?
  7. 不同的测试适配器对相关行为的控制程度如何?
  8. 未指定文件或测试适配器时的默认行为是什么?.runsettings

相关背景资料:

(1) 的 vstest.console.exe 文档指出它“在隔离的进程中运行测试”。/InIsolation

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

(2)可以在命令行上获取多个测试“文件”,这些“文件”是可能引用不同目录中不同项目的DLL。vstest.console.exe

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

.NET 执行 隔离 VSTest.Console.exe

评论

0赞 Y.S 3/21/2017
如果您的测试依赖于特定设置,为什么不在运行测试之前检查它呢?如果此设置是先前操作的结果,则可以实现异常或警告。
1赞 Christian.K 9/9/2017
2 - 4 可以相对容易地使用 ProcessExplorer 进行测试。关于提出的所有观点,我相信您都知道,这都是无证行为,可能会改变;在源代码中四处逛逛可能会有所帮助。
2赞 TheXenocide 3/12/2018
一年后没有答案,但我真的需要知道运行多个程序集的 vstest.console 的 AppDomain 行为是什么,因为我得到了 AppDomainUnloadedExceptions,但仅限于特定条件。

答: 暂无答案