1. ホーム
  2. c#

[解決済み] Visual Studioで単体テストの実行順序を制御する

2023-06-08 09:07:36

質問

さて、これに関する良い情報を探すのはもうやめました。 私は、一度初期化されると、変更できない(または私が望まない)プロパティを設定する静的クラスを呼び出す一連のユニットテストを持っています。

私の問題は、テストが実行されるための一定の順序を強制できないことです。もしそうすることができれば、静的プロパティが信頼できる方法で設定されるようにそれらを実行することができ、それらについてアサートすることができますが、残念ながら Microsoft.VisualStudio.TestTools.UnitTesting フレームワークは一見ランダムに見える順序でそれらを実行するだけです。

そこで、私はこれを見つけました。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.priorityattribute.aspx には、備考欄に "この属性はテストシステムで使用されていません。カスタムの目的でユーザーに提供されています。それじゃ、何の役に立つんだ?この素晴らしい属性を利用するために、独自のテスト用ラッパーを書けというのでしょうか(そのレベルの努力をしようと思えば、私自身簡単に書けるのですが・・・)。

それで、暴言はもう十分です。要するに、私のユニットテストの実行順序を制御する方法はあるのでしょうか?

[TestMethod]
[Priority(0)]

などは動作しないようですが、Microsoft が動作しないと言っているのですから、これは理にかなっています。

また、quot;violation" についてのコメントはご遠慮ください。TestClass は私がテストしているものを分離するものであり、個々の TestMethods を分離するものではありません。とにかく、各テストは独立してうまく実行できますが、静的クラスを解体する方法がないため、ランダムな順序で一緒に実行することはできません。

ああ、私はまた、"Ordered Test"について知っています。

どのように解決するのですか?

テストを1つの巨大なテストにマージするのが効果的です。テストメソッドをより読みやすくするために、次のようなことができます。

[TestMethod]
public void MyIntegratonTestLikeUnitTest()
{
    AssertScenarioA();

    AssertScenarioB();

    ....
}

private void AssertScenarioA()
{
     // Assert
}

private void AssertScenarioB()
{
     // Assert
}

実際、あなたが抱えている問題は、おそらく実装のテスト容易性を向上させるべきであることを示唆しています。