VS.Net单元测试 - 可以进行项目范围的测试设置吗?

时间:2010-04-26 17:37:06

标签: visual-studio unit-testing configuration

在测试文件(MyTest.cs)中,可以在类和单个测试级别进行设置和拆卸。整个项目是否存在类似的钩子?整个解决方案?

2 个答案:

答案 0 :(得分:1)

不,我不相信他们这样做。

通常当人们提出这个问题时,这是因为他们的测试依赖于重要的东西,比如需要为每个测试通道重置的数据库设置。通常,在这里做的正确的事情是模拟/存根/伪造依赖关系并删除导致问题的部分。当然,你的理由可能完全不同。

更新:所以考虑一下我认为你可以用属性和静态类型做些什么。您可以为每个测试程序集添加程序集级别属性,并将其传递给静态类型。

[OnLoadAttribute(typeof(ProjectInitializer))]

当程序集加载时,类型将被解析,它的静态构造函数将在第一次解析时执行(加载程序集时)。

在解决方案级别做一些事情要困难得多,因为它取决于您的单元测试运行器如何处理测试以及它如何将测试加载到AppDomains,每个测试,每个测试类或每个测试项目。我怀疑大多数跑步者为每个项目创建一个新的AppDomain。

我并没有完全推荐这个,因为我没有尝试过,可能会有一些影响。这可能是你想要尝试的一个想法。另一种选择是从一个公共基类派生所有测试,该基类具有一个构造函数,该构造函数可以解析单个元素,而这个构造函数又可以进行设置。这不像是hacky,但意味着拥有一个共同的基类。你也可以使用我怀疑的面向方面的方法。

希望这会有所帮助。这些只是想你如何做到这一点。

阿德

答案 1 :(得分:0)

我们使用[AssemblyInitialize] / [AssemblyCleanup]属性进行项目级测试设置和清理代码。我们这样做有两件事:

  • 创建测试数据库
  • 在临时目录中创建配置文件

它适用于我们,虽然我们必须小心每个测试都会让数据库找到它的方式。看起来有点像这样(简化):

[AssemblyInitialize]
public static void AssemblyInit(TestContext context)
{
    ConnectionString = DatabaseHelper.CreateDatabaseFornitTests();
}

[AssemblyCleanup]
public static void AssemblyCleanup()
{
    DatabaseHelper.DeleteDatabase(ConnectionString);
}

我不知道有什么方法可以做到这个'解决方案'广泛(我想这对于测试运行真的意味着 - 跨越潜在的多个项目)