.net - 在所有测试运行之前是否可以执行一次代码?

基本上我想告诉MSTest在启动一系列测试运行之前执行一些代码,基本上我想做的就是在log4net.Config.XmlConfigurator中粘贴一些代码。

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

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

George Mauer asked 2019-08-13T07:10:44Z
3个解决方案
127 votes

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

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

如果您有多个单元测试组件,我不知道任何包含多个组件的东西。

据我所知,这与你可以获得的主要等价物一样接近。

请注意,AssemblyInitialize修饰的方法必须在TestClass修饰的类中,该类包含至少一个TestMethod修饰的方法,否则将不会执行!

Mark Seemann answered 2019-08-13T07:11:21Z
40 votes

为了完成,这些是"运行代码之前" MSTest的选项:

  • 在该程序集中的任何测试运行之前,使用[TestInitialize]为每个程序集运行一次代码。
  • 在定义方法的类中进行任何测试之前,请使用[TestInitialize]为每个类运行一次代码。
  • 使用[TestInitialize]在定义方法的类中的每个测试之前运行代码。
Konamiman answered 2019-08-13T07:12:10Z
11 votes

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

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

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

听起来你想在所有测试之前运行一些东西。

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

Maestro1024 answered 2019-08-13T07:12:57Z
translate from https://stackoverflow.com:/questions/2382552/is-it-possible-to-execute-code-once-before-all-tests-run