代码之家  ›  专栏  ›  技术社区  ›  George Mauer

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

  •  91
  • George Mauer  · 技术社区  · 15 年前

    基本上,我想告诉MSTEST在启动到一系列测试运行之前执行一点代码,基本上我想做的就是将一些代码插入 Main() .

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

    我需要能够在testsdriven.net和mstest runner中运行我的测试。

    3 回复  |  直到 7 年前
        1
  •  122
  •   AakashM    8 年前

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

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

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

    据我所知,这是尽可能接近一个主要的等价物。

    请注意 AssemblyInitialize -装饰法 必须 在某处 TestClass -至少包含一个的装饰类 TestMethod -装饰方法,否则 被处决!

        2
  •  37
  •   Konamiman    10 年前

    完成时,以下是mstest的“运行代码之前”选项:

    • 使用 [AssemblyInitialize] 在程序集中的任何测试运行之前,为每个程序集运行一次代码。
    • 使用 [ClassInitialize] 在定义方法的类中的任何测试之前,为每个类运行一次代码。
    • 使用 [TestInitialize] 在定义方法的类中的每个测试之前运行代码。
        3
  •  11
  •   Maestro1024    15 年前

    我在MS测试头中看到了这个。

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

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

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

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

    推荐文章