您可以为MSTest运行配置设置临时环境变量吗?

时间:2011-06-07 17:01:06

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

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

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

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

2 个答案:

答案 0 :(得分:5)

虽然对这个解决方案不满意,但我能够通过使用ClassInitializeAttribute为测试类获取我需要完成的MSTest,然后使用Environment.SetEnvironmentVariable进行我需要的更改,然后将其清理干净用theClassCleanupAttribute修饰的方法。

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

答案 1 :(得分:1)

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

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

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

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