【问题标题】:Can you set Temporary Environment Variables for MSTest Run Configurations?您可以为 MSTest 运行配置设置临时环境变量吗?
【发布时间】:2011-06-07 17:01:05
【问题描述】:

我在 Visual Studio 2008 中使用 C# 中的 MSTest。我有一个我想要的特定环境变量和一个我只想在运行特定测试或更好的运行配置中的所有测试期间进行的路径修改。

我尝试使用测试运行配置安装脚本来执行此操作,但正如我所料,因为它是一个批处理文件,一旦退出,更改就会丢失,因此无法正常工作。

是否有任何其他方法可以设置在所有测试运行期间都有效的临时系统环境变量?

【问题讨论】:

  • 您是否从命令行 (Dos/PowerShell) 运行 MSTest?还是来自 Visual Studio?
  • 在 Visual Studio 2008 中,如果不清楚,请见谅。使用默认的 Test Runner 等

标签: c# .net visual-studio-2008 unit-testing mstest


【解决方案1】:

虽然对此解决方案不满意,但我能够通过对测试类使用 ClassInitializeAttribute,然后使用 Environment.SetEnvironmentVariable 进行我需要的更改,然后在用 ClassCleanupAttribute 修饰的方法。

由于没有更好的答案,这就是我能够为一组测试设置环境变量并在完成后清理它的方式。但是,我更希望在 CODE 之外处理它,并以某种方式成为测试配置的一部分。无论如何问题都已解决。

【讨论】:

  • 如果像这样设置变量 Environment.SetEnvironmentVariable("BatchSize", "1000", EnvironmentVariableTarget.Process);它只会用于进程并在之后清理?
【解决方案2】:

如果您相信您的测试套件不会在测试中“中止”,您可以使用 FixtureSetup 和 FixtureTeardown 方法设置然后删除您更改的环境变量。

从评论中编辑:我知道你从哪里来,但在我的编辑中,一个 UT 框架被设计用于创建单元测试。单元测试的概念表明它不应该依赖于任何外部资源,包括环境变量。执行此操作的测试是集成测试,并且需要大量的基础设施(通常比相同 LOC 的单元测试套件花费的时间长很多倍)。

要为依赖于环境变量的代码创建 unit 测试,请考虑拆分实际直接检查环境变量的代码行。并将其放入另一个类的方法中,然后使用 RhinoMocks 或其他任何方式模拟该类,以提供“虚拟”值进行测试,而无需检查(或更改)实际环境变量。

如果这确实是一个集成测试并且您确实需要设置环境变量(假设您正在更改路径以便可以使用 Process.Start 来调用您自己的 notepad.exe 而不是 Windows),这就是 FixtureSetup和 FixtureTeardown 方法/属性用于;执行测试应该成功的固定、可重复环境的复杂设置,然后将环境重置为原来的方式,无论测试中发生了什么。通常,测试失败会引发异常并立即结束测试的执行,因此无法保证测试方法本身末尾的代码运行。

【讨论】:

  • 这似乎是一种更糟糕的做法。似乎单元测试框架应该支持代码之外的一些方法来添加临时环境变量,这些变量将在测试结束时消失。如果分配给变量的数据发生更改,也需要更改大量代码。
  • 你如何提出一个单元测试框架,它是围绕单元测试不应该接触或依赖外部资源、修改外部资源的概念设计的?
  • 我建议他们考虑我们无法控制的东西。我们使用的第 3 方库有时会做一些愚蠢的事情,需要像这样的废话。单元测试不仅仅是一种方式或高速公路,因为它应该是灵活的,并且“测试”框架不应该是“单元测试”所独有的,从集成到持续的所有类型的测试,更多应该由“测试”框架。
  • 好的,您如何使用 MSTest 进行这些 Fixture 类型的设置和拆卸?
  • 如果没有示例说明如何执行您在 MSTest 中声明的内容,没有第三方库,我无法将其标记为正确答案。我已经使用 MSTest 特定功能解决了这个问题,并且也必须在 C# 中完成。但是,就目前而言,您的答案实际上并没有在 MSTest 上下文中回答我的问题。
猜你喜欢
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2020-04-06
  • 2010-10-09
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多