2017-03-15 7 views
2

TestInitializeが動作するためにはTestInitializeが必要ですが、TestInitializeを実行せずに実行できるテストが1つあります。それを行う方法はありますか?1つのTestMethodメソッドに対してTestInitializeを実行しないようにしてください

それはこのように見ないかもしれません:

[TestClass] 
public class BingBangBoom 
{ 
    [TestInitialize] 
    public void Setup() 
    { 
     // ... 
    } 

    [TestMethod] 
    public void Bing() 
    { 
     // ... 
    } 

    [TestMethod] 
    public void Bang() 
    { 
     // ... 
    } 

    [TestMethod(PreventInitialize)] 
    public void Boom 
    { 
     // ... 
    } 
} 

心配されていない場合、私は別の解決策を考え出すことができる

編集 - DavidG RE:

をそれは恥に思えます持っている:

[TestClass] 
public class BingBangBoom 
{ 
    [TestInitialize] 
    public void Setup() 
    { 
     // ... 
    } 

    // 10 very related methods 
} 

[TestClass] 
public class BingBangBoom2 
{ 
    // 1 method, even though it's entirely related to BingBangBoomin' 
} 

私はそれがwだと思いますそれは帽子です。

+4

別のクラスでは、そのテストを入れて? – DavidG

+0

ありがとう - @DavidG - 私は編集を追加しました。 – Jimmyt1988

答えて

2

これはすぐには分かりませんが、確かに実行可能です。

あなたはこのように属性を持っていると仮定:

public class SkipInitializeAttribute : Attribute { } 

あなたのテストクラス内のパブリックプロパティは、テストフレームワークによって注入される必要があるもの:

public TestContext TestContext { get; set; } 

そして同じように、あなたの初期化を分岐これは:

[TestInitialize] 
public void Initialize() 
{ 
    bool skipInitialize = GetType().GetMethod(TestContext.TestName) 
     .GetCustomAttributes<SkipInitializeAttribute>().Any(); 

    if (!skipInitialize) 
    { 
     // Initialization code here 
    } 
} 

自己テストした解決策としての作業サンプル:

using System; 
using System.Linq; 
using System.Reflection; 

using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace UnitTestProject1 
{ 
    public class SkipInitializeAttribute : Attribute 
    { 
    } 

    [TestClass] 
    public class UnitTest1 
    { 
     public TestContext TestContext { get; set; } 

     private bool IsInitializationDone { get; set; } 

     [TestInitialize] 
     public void Initialize() 
     { 
      bool skipInitialize = GetType().GetMethod(TestContext.TestName).GetCustomAttributes<SkipInitializeAttribute>().Any(); 

      if (!skipInitialize) 
      { 
       // Initialization code here 
       IsInitializationDone = true; 
      } 
     } 

     [TestMethod] 
     public void TestMethod1() 
     { 
      Assert.IsTrue(IsInitializationDone); 
     } 

     [TestMethod] 
     [SkipInitialize] 
     public void TestMethod2() 
     { 
      Assert.IsFalse(IsInitializationDone); 
     } 

     [TestMethod] 
     public void TestMethod3() 
     { 
      Assert.IsTrue(IsInitializationDone); 
     } 
    } 
} 

と結果:

Starting test execution, please wait... 
Passed TestMethod1 
Passed TestMethod2 
Passed TestMethod3 

Total tests: 3. Passed: 3. Failed: 0. Skipped: 0. 
Test Run Successful. 

あなたは、基本クラス/ヘルパーと遊ぶことができる心の中で、この一般的な考え方を持つことなど

+0

カスタム属性のアプローチをありがとう:)ラド! – Jimmyt1988

関連する問題