是否有可能在所有测试运行之前执行一次代码?

基本上,我想告诉 MSTest 在启动到一系列测试运行之前执行一些代码,本质上我想做的事情与在 Main()中粘贴一些代码是一样的。

之所以这样做,是因为我想在集成测试运行期间使用 log4net 进行一些日志记录。我不能只使用 log4net.Config.XmlConfigurator程序集属性,因为当它在我的测试程序集中读取它时,它已经调用了 LoggerManager。文档建议在代码入口点显式地配置 log4net-但是在我的测试中它在哪里呢?

我需要能够在 TestDriven.NET 和 MSTest 运行器中运行我的测试。

50751 次浏览

我在 MS 测试标题中看到了这一点。

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

这将在一个类中的测试之前运行。

听起来你想在所有测试之前做点什么。

测试运行配置中还有安装脚本选项。

FWIW,您可以使用 AssemblyInitialize属性在程序集中的所有单元测试执行之前运行代码:

[TestClass]
public class SetupAssemblyInitializer
{
[AssemblyInitialize]
public static void AssemblyInit(TestContext context)
{
// Initalization code goes here
}
}

如果您有多个单元测试程序集,我不知道任何包含多个程序集的内容。

据我所知,这是你能找到的最接近 Main 等价物的东西了。

Note that the AssemblyInitialize-decorated method 必须的 be in a TestClass-decorated class which contains at least one TestMethod-decorated method, otherwise it will 没有 be executed!

对于完成,这些是 MSTest 的“ run code before”选项:

  • 在每个程序集运行任何测试之前,使用 [AssemblyInitialize]对该程序集运行一次代码。
  • 在定义方法的类中进行任何测试之前,使用 [ClassInitialize]对每个类运行一次代码。
  • 使用 [TestInitialize]在定义方法的类中的每个测试之前运行代码。