質問

NUnit によって生成された TestResult.xml ファイル内に実際に表示されるように、単体テストに「メッセージ」を追加できるようにしたいと考えています。たとえば、現在は次のように生成されています。

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" />
</results>

次のような追加の属性 (場合によってはノード) を持てるようにしたいと考えています。

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." />
</results>

考え方は、上記の「メッセージ」がテスト メソッド自体 (私の場合は実行時に生成される) 内で何らかの形で定義されるということです。このようなことを行うために不足しているプロパティがどこかにありますか?

役に立ちましたか?

解決

これは要点を外しているかもしれませんが、テストの内容がわかるようにテストに名前を付けるのはどうでしょうか。そうすれば、メッセージさえ必​​要なくなるかもしれません。

それが絶対に必要であることが判明した場合は、(思いつきですが) TestCase から追加の属性を読み取り、それを出力に添付する独自のテストランナーを作成する必要があると思います。

他のヒント

最近の NUnit リリースでは、次のことができます。

Assert.AreEqual(250.00, destination.Balance, "some message here");

ここで、「Some message here」は、定数メッセージ、または実行時に生成されて文字列変数に格納されるメッセージです。これらのメッセージは、アサーションが失敗した場合にのみ出力に表示されます。ただし、通常は、失敗したテストに関する情報のみが必要なので、前の各メッセージを追加して文字列を構築し、その文字列変数をすべてのアサートのメッセージとして使用することをお勧めします。これにより、失敗したテストから必要な情報をすべて取得できます。

実行時に利用できるものは何もありませんが、調査すべき機能がいくつかあります。の 説明 属性と 財産 属性はどちらも XML 出力ファイルにテキストを追加します。残念ながら、両方ともコンパイル時に定義されます。

TestContext を使用すると、必要なメッセージを簡単に書き出すことができます。これが私のセットアップ方法です。

私の各テストはテストベース クラスから継承されます。これにより、冗長なコードが削除されます。

[TestFixture]
public class TestBase
{

    public IWebDriver driver;

    //[OneTimeSetUp] and [OneTimeTearDown] go here if needed

    [SetUp]
    public void Setup(){
         driver = Shortcuts.SetDriver("my browser");
    }

    [TearDown]
    public void TearDown()
    {
        driver.Quit();
        Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString());
    }

    public void Comment(string _comment)
    {
        TestContext.Out.WriteLine(_comment);
    }
    public void Error(string _error)
    {
        TestContext.Error.WriteLine(_error);
    }

}

下の 2 つの関数が、前述の TestContext にメッセージまたはエラーを書き出すことがわかります。これは、並列化可能なテストでもうまく機能します。

その後、その親クラスを使用してテストをセットアップし、コンソールに書き込むことができます。

//Role Management
public class RoleManagementTests : TestBase
{
    [TestCase]
    public void RoleManagement_7777_1()
    {
        Comment("Expected: User has the ability to view all roles in the system.");
        //Test goes here
    }
}

これで、NUnit コンソール ランナーを使用して、出力 (Visual Studio) と TestResult.xml で結果を確認できるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top