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

Geo*_*uer 101 .net mstest

基本上我想告诉MSTest在启动一系列测试运行之前执行一些代码,基本上我想做的就是坚持使用一些代码Main().

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

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

Mar*_*ann 140

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

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

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

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

请注意,AssemblyInitialize-decorated方法必须位于TestClass-decorated类中,该类至少包含一个TestMethod-decorated方法,否则将不会执行!

  • 注意:仅当该方法是使用TestClass属性标记的类的成员时,测试引擎才会运行使用AssemblyInitialize属性标记的方法. (7认同)
  • @Jowen:测试引擎只运行一个用AssemblyInitialize属性标记的方法,只有当该方法是用TestClass属性标记的类的成员并且包含用TestMethod属性标记的方法时. (5认同)
  • 标有AssemblyInitialize的方法将在Visual Studio 2015 Ultimate中运行,而不使用标记有TestMethod属性的其他方法. (2认同)

Kon*_*man 50

完成后,这些是MSTest的"run code before"选项:

  • 使用[AssemblyInitialize]到每个装配运行一次代码,在装配任何测试运行之前.
  • 用于[ClassInitialize]在定义方法的类中进行任何测试之前,每个类运行一次代码.
  • 用于[TestInitialize]在定义方法的类中的每个测试之前运行代码.

  • 这些属性的清理对应物是用于拆卸操作的清除后缀(例如ClassCleanup) (11认同)
  • 请注意,“[ClassInitialize]”不能只是扔进去,而必须是静态的,并且只接受一个“TestContext”类型的参数([source](/sf/answers/790836301/))。 (4认同)

Mae*_*024 12

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

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

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

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

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

  • 可能是我.当你说"在测试AppDomain中运行代码"时,我不确定是否会关注你.我把你的问题看作是想在一系列测试之前执行代码,如果它是其他不同的东西."无论这些测试运行中包含哪些类型的测试,安装脚本和清理脚本都会在测试运行之前和之后运行." http://msdn.microsoft.com/en-us/library/ms182480%28VS.80%29.aspx (2认同)