C#AssemblyInitialize没有运行

Yur*_*riW 3 c# asp.net

我正在尝试对我的C#ASP.NET项目进行单元测试,但需要为所有测试运行一些初始化代码:

[TestClass()]
public class Init
{

    [AssemblyInitialize]
    public static void initialize()
    {
            ContextProvider.setContext(new TestContext());
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我在测试之前需要运行的全部内容,但它没有运行.我试图调试我的所有测试并在该行中设置一个断点,但它没有被击中.如果我注释掉[AssemblyInitialize]并运行一个不需要初始化的特定测试,它就会成功运行.但是,使用此行,不会运行任何测试(并且根本没有断点)

我在这里错过了什么?

bie*_*ski 12

这是(我认为)需要检查的完整列表:

  • 您应该使用 Microsoft.VisualStudio.TestTools.UnitTesting;
  • 班级必须是公开的
  • 该类不能是静态的或抽象的
  • 该类必须用 [TestClass] 修饰
  • 该方法必须是公共的
  • 该方法必须是静态的
  • 该方法必须用 [AssemblyInitialize] 修饰
  • 该方法必须具有签名:void InitName(TestContext tc)


Yur*_*riW 7

Phil1970的有用评论有助于解决问题.

initialize方法的问题是它必须接收TestContext(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext).我找不到任何明确说明这一点的指南/ Microsoft文档,但是这个msdn页面中的示例确实有TestContext作为该方法的输入.

添加后,测试成功运行.在旁注中,我创建了一个类来模拟我需要的一些数据并将其称为TestContext,结果证明这是一个非常糟糕的名称选择,使得理解我的错误变得更加困难.我将它重命名为APITestContext,这是我的固定初始化类.

[TestClass()]
public class Init
{

    [AssemblyInitialize()]
    public static void initialize(TestContext testContext)
    {
            ContextProvider.setContext(new APITestContext());
    }
}
Run Code Online (Sandbox Code Playgroud)


Mau*_*bon 0

不知道它是否可以相关,但在文档中它说

此属性不应用于 ASP.NET 单元测试,即任何具有 [HostType("ASP.NET")] 属性的测试。由于 IIS 和 ASP.NET 的无状态性质,每次测试运行时可能会多次调用用此属性修饰的方法。

您使用该主机类型吗?