C#AssemblyInitialize没有运行

时间:2017-01-04 13:40:42

标签: c# asp.net

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

[TestClass()]
public class Init
{

    [AssemblyInitialize]
    public static void initialize()
    {
            ContextProvider.setContext(new TestContext());
    }
}

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

我在这里缺少什么?

3 个答案:

答案 0 :(得分:6)

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

initialize方法的问题是它必须接收TestContext(<ListBox Margin="10" ItemsSource="{Binding Files1}" ContextMenu="{StaticResource contextMenu}" Tag="{x:Type local:FileTypeA}"/> )。我找不到任何明确说明这一点的指南/ Microsoft文档,但this msdn page中的示例确实有TestContext作为方法的输入。

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

private static bool NewFile_CanExecute( ListBox listbox ) { return true; }

private static void NewFile_Executed( ListBox listbox )
{
    var filetype = listbox.Tag as Type;

    System.Diagnostics.Debug.WriteLine( string.Format( "Creating new file of type {0}", filetype ) );

    // if( filetype == typeof( FileTypeA ) ) CreateNewFileTypeA();
    // else if( filetype == typeof( FileTypeB ) ) CreateNewFileTypeB();
    // etc...
}

答案 1 :(得分:2)

(我认为)这是要检查的所有事情的完整列表:

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

答案 2 :(得分:0)

不知道它是否可以相关,但in the documentation它说

  

不应在ASP.NET单元测试中使用此属性,即使用[HostType(&#34; ASP.NET&#34;)]属性进行的任何测试。由于IIS和ASP.NET的无状态特性,每次测试运行时可能会多次调用使用此属性修饰的方法。

您使用的是HostType吗?