2017-08-04 6 views
2

[TestInitialize]メソッドで頻繁に使用される変数を初期化したいが、すべてのテストメソッドに対して同じ変数を初期化したくない。デコレータなどでテストメソッドを区別する方法はありますか?たとえば、.NET Unit Testing - 変数初期化のためにTestMethodsを互いに区別する方法

[TestInitialize] 
public Setup() 
{ 
    //pseudocode 
    if VariablesContainLetters 
     var1 = a; var2 = b; var3 = c; 
    else if VariablesContainNumbers 
     var4 = 1; var5 = 2; var6 = 3; 
} 

[TestMethod] 
[VariablesContainLetters] 
public method1() {} 

[TestMethod] 
[VariablesContainNumbers] 
public method2() {} 

私は異なるTestMethodsの異なる変数を初期化できますか?

+0

私はこの記事で説明のように、テストメソッド名に基づいて条件文を書くことになりました。これは素晴らしい機能です。それをチェックしてください:https://stackoverflow.com/a/33895194/7201774 if(TestContext.TestName == "testMethodName") – Rich

答えて

1

可能な解決策の1つは、さまざまな方法で変数を初期化するプライベートメソッドをテストクラス内に作成することです。

次に、各単体テスト内で、テストの最初の行に目的のセットアップメソッドを呼び出し、残りのテストを続行させます。

今後のテストのメンテナンスのための読みやすいデザインにつながると思います。例えば

[TestMethod] 
public void UnitTest_Testing_Letters() 
{ 
    InitializeUsingLetters(); 
    // ... 
    // The rest of your unit test 
    Assert.AreEqual(a, _var1); 
} 

[TestMethod] 
public void UnitTest_Testing_Numbers() 
{ 
    InitializeUsingNumbers(); 
    // ... 
    // The rest of this unit test 
    Assert.AreEqual(1, _var4); 
} 

private void InitializeUsingLetters() 
{ 
    _var1 = a; 
    // ... 
} 

private void InitializeUsingNumbers() 
{ 
    _var4 = 1; 
    // ... 
} 
2

ここに、あなたが達成しようとしていると思うものの例があります。 Dictionaryを宣言する場合は、stringを他のタイプに置き換えることができます。 Bool、int、オブジェクトも。

[TestInitialize] 
public Setup() 
{ 
    Dictionary<string, string> variables = new Dictionary<string, string>(); 
    //pseudocode 
    if VariablesContainLetters 
     variables.Add("var1", "a"); 
     variables.Add("var2", "b"); 
    else if VariablesContainNumbers 
     variables.Add("var4", "1"); 
     variables.Add("var5", "2"); 
} 

[TestMethod] 
[VariablesContainLetters] 
public method1() {MessageBox.Show(variable["var1"]);} //prints "a" 

[TestMethod] 
[VariablesContainNumbers] 
public method2() {MessageBox.Show(variable["var4"]);} //prints "1" 
+0

[VariablesContainLetters]または[VariablesContainNumbers]デコレータの使い方がわかりません。今のところ彼らはうまくいかないでしょう。このためには、System.Attributeクラスを実装するVariablesContainLettersという名前のクラスを作成する必要があると思います。私はそれをどうやって行うのか正確には分かっていないが、それはスタートだと思う。 – Rich

関連する問題