基本上我想告诉MSTest在启动一系列测试运行之前执行一些代码,基本上我想做的就是在Main()
中粘贴一些代码。
我想这样做的原因是我希望在集成测试运行期间使用log4net进行一些日志记录。我不能只使用log4net.Config.XmlConfigurator
程序集属性,因为它在我的测试程序集中读取它时已经调用LoggerManager
。文档建议在代码入口点显式配置log4net - 但我的测试中的位置是什么?
我需要能够在TestDriven.NET和MSTest跑步者中运行我的测试。
答案 0 :(得分:131)
FWIW,您可以使用AssemblyInitialize属性在程序集中的所有单元测试执行之前运行代码:
[TestClass]
public class SetupAssemblyInitializer
{
[AssemblyInitialize]
public static void AssemblyInit(TestContext context)
{
// Initalization code goes here
}
}
如果你有多个单元测试组件,我不知道任何包含多个组件的东西。
据我所知,这与你可以获得Main等价物一样接近。
请注意,AssemblyInitialize
- 装饰方法必须位于TestClass
- 装饰的类中,该类至少包含一个TestMethod
- 装饰方法,否则它将会不被执行!
答案 1 :(得分:41)
完成后,这些是MSTest的“run code before”选项:
[AssemblyInitialize]
为每个程序集运行一次代码。[ClassInitialize]
为每个类运行一次代码。[TestInitialize]
在定义方法的类中的每个测试之前运行代码。答案 2 :(得分:11)
我在MS Test标题中看到了这一点。
// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }
这将在一个类中的测试之前运行。
听起来你想在所有测试之前运行一些东西。
测试运行配置中还有设置脚本选项。