NUnitテストの実行順序


110

デフォルトでは、nunitテストはアルファベット順に実行されます。誰かが実行順序を設定する方法を知っていますか?このための属性はありますか?


7
なぜこれをしたいのですか?実行順序に依存しているようですが、これは悪いことです。なぜこれが必要なのかを再考する必要があります。単体テストは分離して実行し、他から完全に独立させる必要があります。テスト臭の不安定なテストの候補を作成しているようです。
RichardOD 2009

これは重複しているように見えますが、私の答えはここにあります
Johnno Nolan

12
@RichardOD-すべきです!そして、実際にはほとんどすべての統合テストが順番に実行されるので、それは実際にイベントである必要はありません。テストの順序をランダム化するかどうかQAチームに尋ねてください。
ティムタム

4
私は現在いくつかのテストを持っていますが、それらは重要ではないにしても重要であるようです。個人的には、テストの順序をランダム化して、テストが順序に依存しないようにする方法を具体的に教えてください。もちろん、私が本当に望んでいるのは、問題が見つかるまで、または停止と言うまで、すべてのテストをランダムな順序で実行するテストランナーです。それを一晩実行したが、朝はまだすべてが緑色であった場合、意図しない副作用の最後を排除したと確信できる。
Mel

1
ここで統合テストについて話していることを指定するように質問が更新された場合、この質問はより関連性が高くなります...少なくともXUnitテストパターンを読んでボクおじさんをフォローしている場合など、ユニットテストに関するルールをすべて知っています。あなたが..しかし、このようなNUnitのようなフレームワークも統合がアップテストと同様に素早く実行している...とあなたは間違いなく..高価なデータベースのセットアップが含まれている場合は特に、それらがランダムになりたくない取得のために本当に便利です
nrjohnstone

回答:


51

単体テストはそれぞれ独立して実行でき、スタンドアロンで実行できる必要があります。それらがこの基準を満たしている場合、順序は重要ではありません。

ただし、特定のテストを最初に実行したい場合があります。典型的な例は、一部のテストの実行時間が他のテストよりも長い継続的統合の状況です。データベースを使用するテストの前にモックを使用するテストを実行できるように、category属性を使用します。

つまり、これをクイックテストの開始時に配置します

[Category("QuickTests")]

特定の環境条件に依存するテストがある場合は、TestFixtureSetUpおよびTestFixtureTearDown属性を検討してください。これらの属性を使用すると、テストの前後に実行されるメソッドをマークできます。


2
@Chris、私はこれらの属性を使用しない傾向があります。これは興味深いブログ投稿jamesnewkirk.typepad.com/posts/2007/09/why-you-should-.htmlです。ただし、カテゴリテストについての良い点。
RichardOD 2009

29
順序に依存するテストの別の例は、nunitフレームワークを使用して統合テストを実行する場合です...
Byron Ross

1
@ByronRoss:私はそれを行うときにテストを大きくする傾向があり、既存の単体テストにできる限り頼りにして、より少ないテストを記述できるようにします。次に、完全な実行がそれぞれ失敗します。また、既存のデータに依存するのではなく、既存のデータとは別に存在できるようにデータを設計しようとしています。
Merlyn Morgan-Graham

1
テストをランダムな順序で実行しない場合、順不同で実行したときに実際に機能することをどのように確認できますか?あなたが言っていることは、「ソフトウェアにバグがない場合、テストは不要です」と同じことです。
jforberg 2014年

@jforberg:ランダムに発生する障害が発生した場合、それを修正したとき、どう言いますか?
NeedHack

175

私が指摘したいのは、ほとんどのレスポンダーはこれらを単体テストであると想定していましたが、質問ではそれらがそうであるとは明記されていませんでした。

nUnitは、さまざまなテスト状況で使用できる優れたツールです。テストの順序を制御したい理由がわかります。

そのような状況では、テスト名に実行順序を組み込むことに頼らざるを得ませんでした。属性を使用して実行順序を指定できると便利です。


たとえば、テストを呼び出したということ001_first_test 002_second_testですか?
ashes999

はい、そうです。ただし、通常は必要に応じて簡単にテストを挿入できるパターンを使用しているため、おそらく010_first_test、020_second_testなど
Les

83
ここで唯一正気な答えをありがとう。これは特定の質問ですが、どういうわけか曖昧な教育的回答が支持されています。はい、私たちは皆、ユニットテストがどうあるべきかを知っています。
Egor Pavlikhin、2012

1
アルファベット順の実行順序に依存しないでください。多くのテストランナーは、多くのスレッドまたはプロセスでテストを同時に実行しますが、必ずしもアルファベット順ではありません。たとえば、NCrunchは、変更したコード(影響を受けるテスト)に基づいてテストを優先順位付けし、次に前回失敗したかどうか、次に実行速度が速いか遅いかを優先します。定義された順序が必要な場合は、それらのテストのメタランナーを作成し、通常の実行から除外します。
Abel、

3
順序を指定するもう1つの理由は、テストスイートの残りの部分を続行する前に、まず特定の問題を見つけることです。つまり、ユーザーを作成するためのテストが失敗した場合、この結果を見つける前に、他にすべてを実行する必要はありません。私の他のテストではおそらくユーザーをあざけるが、これが失敗する最初のテストであることは重要である-特にテストスイートが大きい場合。
Bron Davies

125

NUnit 3.2.0にが追加されましたOrderAttribute。以下を参照してください:

https://github.com/nunit/docs/wiki/Order-Attribute

例:

public class MyFixture
{
    [Test, Order(1)]
    public void TestA() { ... }


    [Test, Order(2)]
    public void TestB() { ... }

    [Test]
    public void TestC() { ... }
}

5
ありがとう、私が探していたもののポイントまで-そして議論はなく、なぜそれが良いか悪いか:)
aknoepfel

1
そして、それを10進数ではなく整数にします。そのため、テストを挿入する必要がある場合、すべてのテストの番号を付け直す必要があります。
epitka

ミドルアイテムをそのように紹介したい場合は、常に何百万という非常に大きな数字から始めることもできます。Imoメソッドの依存関係ツリーのように、優先順位に数値を使用するよりも簡単に順序付けできる方法があるはずですが、それぞれに独自の欠点があります。
はRazvanフラウィウスパンダ

9
良い答えですが、ドキュメントには、テストは前のテストが完了するのを待たないことが記載されています。
ROX

興味深いことに、私の経験では、Test属性とOrder属性を別々に追加した場合、テストの順序付けは保証されません。
AT

22

テストを特定の順序で実行することを望んでも、テストが相互に依存しているわけではありません。現在、TDDプロジェクトに取り組んでおり、すべてをモック/スタブした優れたTDDerですが、テスト結果が表示される順序をアルファベット順ではなくテーマ別に指定できれば、読みやすくなります。これまでのところ、私が考えることができる唯一のことは、クラス、名前空間、およびメソッドのクラスの前にa_ b_ c_を付加することです。(良くない)[TestOrderAttribute]属性はいいと思います-厳密にフレームワークが続くのではなく、これを達成するためのヒント


10

テストが順序に依存しているかどうかに関係なく...私たちの中には、秩序だった方法ですべてを制御したいだけのものもあります。

単体テストは通常​​、複雑さの順に作成されます。では、なぜそれらも複雑さの順序、または作成された順序で実行してはならないのでしょうか。

個人的には、テストを作成した順に実行するのが好きです。TDDでは、連続する各テストは当然より複雑になり、実行に時間がかかります。単純なテストは失敗の原因を示すより良い指標になるので、最初に失敗する方がいいと思います。

しかし、特にテストが他のテストに依存していないことをテストしたい場合は、それらをランダムな順序で実行することの利点もわかります。「ランナーが停止するまでランダムにテストを実行する」にランナーをテストするオプションを追加してみませんか?


9

私はかなり複雑なWebサイトでSeleniumを使用してテストを行っており、テストスイート全体が30分以上実行される可能性があります。アプリケーション全体をカバーすることはまだできていません。以前のすべてのフォームがテストごとに正しく入力されていることを確認する必要がある場合、これにより、テスト全体にわずかな時間ではなく、かなりの時間が追加されます。テストの実行にオーバーヘッドが多すぎる場合、人々は必要な頻度でテストを実行しません。

したがって、私はそれらを整理して、以前のテストに依存してテキストボックスなどを完成させました。前提条件が有効でない場合、Assert.Ignore()を使用しますが、それらを順番に実行する必要があります。


1
完全に。私はここで同じ船に乗っています。
Sleeper Smith

私も!まさに私がこの質問にたどり着いた理由!
Niklas Wulff 2015年

@NiklasRingdahl(Visual Studioをnunitで使用している場合は、nunitをダンプしてMSテストを使用します)。次に、Visual Studioのorderedtestファイルを使用して、実行したい順序でテストケースを配置できます
Rahul Lodha

@RahulLodhaありがとう!調べてみます。
Niklas Wulff 2015年

9

私は前の答えが本当に好きです。

属性を使用して注文範囲を設定できるように少し変更しました。

namespace SmiMobile.Web.Selenium.Tests
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using NUnit.Framework;

    public class OrderedTestAttribute : Attribute
    {
        public int Order { get; set; }


        public OrderedTestAttribute(int order)
        {
            Order = order;
        }
    }

    public class TestStructure
    {
        public Action Test;
    }

    class Int
    {
        public int I;
    }

    [TestFixture]
    public class ControllingTestOrder
    {
        private static readonly Int MyInt = new Int();

        [TestFixtureSetUp]
        public void SetUp()
        {
            MyInt.I = 0;
        }

        [OrderedTest(0)]
        public void Test0()
        {
            Console.WriteLine("This is test zero");
            Assert.That(MyInt.I, Is.EqualTo(0));
        }

        [OrderedTest(2)]
        public void ATest0()
        {
            Console.WriteLine("This is test two");
            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(2));
        }


        [OrderedTest(1)]
        public void BTest0()
        {
            Console.WriteLine("This is test one");
            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(1));
        }

        [OrderedTest(3)]
        public void AAA()
        {
            Console.WriteLine("This is test three");
            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(3));
        }


        [TestCaseSource(sourceName: "TestSource")]
        public void MyTest(TestStructure test)
        {
            test.Test();
        }

        public IEnumerable<TestCaseData> TestSource
        {
            get
            {
                var assembly =Assembly.GetExecutingAssembly();
                Dictionary<int, List<MethodInfo>> methods = assembly
                    .GetTypes()
                    .SelectMany(x => x.GetMethods())
                    .Where(y => y.GetCustomAttributes().OfType<OrderedTestAttribute>().Any())
                    .GroupBy(z => z.GetCustomAttribute<OrderedTestAttribute>().Order)
                    .ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

                foreach (var order in methods.Keys.OrderBy(x => x))
                {
                    foreach (var methodInfo in methods[order])
                    {
                        MethodInfo info = methodInfo;
                        yield return new TestCaseData(
                            new TestStructure
                                {
                                    Test = () =>
                                        {
                                            object classInstance = Activator.CreateInstance(info.DeclaringType, null);
                                            info.Invoke(classInstance, null);
                                        }
                                }).SetName(methodInfo.Name);
                    }
                }

            }
        }
    }
}

このアプローチは素晴らしいと思います。ただし、リフレクションコードは属性を持つすべてのメソッドをプルするので、特定のテストフィクスチャを実行しようとすると、思ったよりも多く実行されることに驚くかもしれません。これが望ましい動作でない場合は、LINQクエリを簡単に変更できます。詳細については、私の回答のリンクを参照してください。
Chrispy、2014年

OrderedTestNUnit 3ではサポートされなくなりました
コンラッド

7

私はこれが比較的古い投稿であることを知っていますが、テスト名をぎこちなくせずにテストを維持する別の方法があります。TestCaseSource属性を使用し、渡すオブジェクトにデリゲート(アクション)を持たせることで、順序を完全に制御できるだけでなく、テストに名前を付けることもできます。

ドキュメントによれば、テストソースから返されたコレクション内のアイテムは常にリストされている順序で実行されるため、これは機能します。

これは私が明日行うプレゼンテーションのデモです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;

namespace NUnitTest
{
    public class TestStructure
    {
        public Action Test;
    }

    class Int
    {
        public int I;
    }

    [TestFixture]
    public class ControllingTestOrder
    {
        private static readonly Int MyInt= new Int();

        [TestFixtureSetUp]
        public void SetUp()
        {
            MyInt.I = 0;
        }

        [TestCaseSource(sourceName: "TestSource")]
        public void MyTest(TestStructure test)
        {
            test.Test();
        }

        public IEnumerable<TestCaseData> TestSource
        {
            get
            {
                yield return new TestCaseData(
                    new TestStructure
                    {
                        Test = () =>
                        {
                            Console.WriteLine("This is test one");
                            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(1));
                        }
                    }).SetName(@"Test One");
                yield return new TestCaseData(
                    new TestStructure
                    {
                        Test = () =>
                        {
                            Console.WriteLine("This is test two");
                            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(2));
                        }
                    }).SetName(@"Test Two");
                yield return new TestCaseData(
                    new TestStructure
                    {
                        Test = () =>
                        {
                            Console.WriteLine("This is test three");
                            MyInt.I++; Assert.That(MyInt.I, Is.EqualTo(3));
                        }
                    }).SetName(@"Test Three");
            }
        }
    }
}

このパターンは、線形実行には時間がかかりすぎる並列統合テストに使用します。すべてのテストは1つのタイプで行われるため、Action <T in>を使用します。すべてのアクションには、「ShouldBeFoo」が何をするかを示すキーがあります。このようにして、テストの実行内容がテスト名に表示され、TestCaseSourceをフィルタリングして、さまざまなタイプのテストをグループ化できます。皮肉なことに、私は実行順序を気にしませんが、それが機能することに同意します。
Novaterata 2014

TestCaseSource順序付けされたテストを実行する方法としてを使用することは、天才のストロークです。よくやった。このアプローチを以下のアプローチと組み合わせて、使いやすくするためにいくつかの変更を加えました。詳細については、私の回答のリンクを参照してください。ただし、根本的なアイデアは、このすばらしい回答からのものです。
Chrispy、2014年

悲しいことに、NUnit 3では、のソースはTestCaseSource静的でなければならず、パターンを使用できません。残念。
2016

@コンラッド。メソッドを静的にすることとそうでないことの違いがわかりません。テストはまだどちらかの順序で正常に戻ります。
Dave Bush、

静的である必要があるのはメソッドではTestCaseSourceありません。ソース(変数またはプロパティ)はNUnit 3の静的オブジェクトでなければなりません。そうでない場合、テストは実行されません。また、静的オブジェクト内に動的オブジェクトを作成することはできません。なぜそれがVで動作しないことがあります3。
コンラッド

5

NUnitフレームワークを使用して実行される、C#で記述されたSelenium WebDriverエンドツーエンドUIテストケースを使用しています。(ユニットケースそのものではありません)

他のテストは前提条件としていくつかのデータを追加する必要があるため、これらのUIテストは確かに実行順序に依存します。(すべてのテストで手順を実行することは現実的ではありません)

10番目のテストケースを追加した後、NUnitがTest_1 Test_10 Test_2 Test_3 ..の順に実行したいと考えています。

したがって、今のところテストケース名をアルファベット順に並べる必要があると思いますが、実行順序を制御するこの小さな機能をNUnitに追加するとよいでしょう。


9
Arranに同意しない:UIテストは本質的に小さなステップのシーケンスです。各ステップはテストである必要があります(理由-失敗した場合、どのステップかを知る必要があります)。シーケンスは独立していてもかまいませんが、シーケンス内では、順序が重要であり、障害時に停止する必要があります。
Zasz

3

通常、ユニットテストは独立している必要がありますが、必要な場合は、次のようにメソッドにアルファベット順に名前を付けることができます。

[Test]
public void Add_Users(){}

[Test]
public void Add_UsersB(){}

[Test]
public void Process_Users(){}

またはあなたがすることができます。

        private void Add_Users(){}

        private void Add_UsersB(){}

        [Test]
        public void Process_Users()
        {
           Add_Users();
           Add_UsersB();
           // more code
        }

2
今は例外ですが、名前はアルファベットにする必要があります。これはひどい解決策です。:(

@ user166390-それはひどくないではありません。動作し、文書化されたNUnitの動作に依存します。
ティムタム

for1で十分ですがa_ b_ t1_t2_代わりに、または末尾の文字を見逃しがちな文字を使用してテストを開始すると、はるかに簡単になります
Chris Marisic

3

テストの順序付けメカニズムを利用するのには非常に十分な理由があります。私自身のテストのほとんどは、セットアップ/ティアダウンなどの優れた手法を使用しています。その他には、膨大な量のデータセットアップが必要です。これを使用して、さまざまな機能をテストできます。これまで、これらの(Selenium Webdriver)統合テストを処理するために大きなテストを使用してきました。ただし、上記のhttps://github.com/nunit/docs/wiki/Order-Attributeに提案された投稿には多くのメリットがあると思います 。注文が非常に価値がある理由の例を次に示します。

  • Selenium Webdriverを使用してテストを実行し、レポートをダウンロードする
  • レポートの状態(ダウンロード可能かどうかに関係なく)は10分間キャッシュされます。
  • つまり、すべてのテストの前に、レポートの状態をリセットし、状態が変更されたことが確認されるまで最大10分間待ってから、レポートが正しくダウンロードされることを確認する必要があります。
  • レポートは複雑であるため、モックやテストフレームワーク内の他のメカニズムを介して、実用的/タイムリーにレポートを生成することはできません。

この10分の待機時間は、テストスイートの速度を低下させます。多数のテストで同様のキャッシュ遅延を乗算すると、多くの時間を消費します。テストの順序付けにより、テストスイートの最初でデータのセットアップを「テスト」として実行でき、テストの実行の終わりに向けて実行されるテストはキャッシュに依存します。


2

この質問は本当に古いですが、検索からこれに到達する可能性のある人のために、user3275​​462とPvtVandals / Ricoから優れた回答を取り、自分の更新のいくつかと一緒にGitHubリポジトリに追加しました。また、関連するブログ投稿を作成しまし。詳細については、追加情報をご覧ください。

これがあなた方すべてに役立つことを願っています。また、Category属性を使用して、統合テストや他のエンドツーエンドテストを実際の単体テストと区別することもよくあります。単体テストには順序依存性があるべきではないと指摘する人もいますが、他のタイプのテストはそうすることが多いので、必要なテストのカテゴリのみを実行し、それらのエンドツーエンドテストを順序付けるための良い方法を提供します。


あなたは私が持っている問題で私を助けることができる、ここのリンクは次のとおりです。stackoverflow.com/questions/31281395/...
モルガン・ソレン

1

私はNUnitコミュニティーが何も考え出していないことに驚いたので、私はこのようなものを自分で作成しに行きました。

現在、NUnitでテストを注文できるオープンソースライブラリ開発しています。テストフィクスチャを注文したり、「注文したテスト仕様」を注文したりできます。

ライブラリには次の機能があります。

  • 複雑なテスト注文階層を構築する
  • 順番どおりのテストが失敗した場合、後続のテストをスキップします
  • 整数順ではなく依存関係によってテストメソッドを並べ替える
  • 順序付けられていないテストと並べて使用できます。順序付けられていないテストが最初に実行されます。

このライブラリは、実際には、MSTestが.orderedtestファイルの順序付けをテストする方法に影響を受けています。以下の例をご覧ください。

[OrderedTestFixture]
public sealed class MyOrderedTestFixture : TestOrderingSpecification {
    protected override void DefineTestOrdering() {
        TestFixture<Fixture1>();

        OrderedTestSpecification<MyOtherOrderedTestFixture>();

        TestFixture<Fixture2>();
        TestFixture<Fixture3>();
    }

    protected override bool ContinueOnError => false; // Or true, if you want to continue even if a child test fails
}

1

を使用している[TestCase]場合、引数TestNameはテストの名前を提供します。

指定しない場合、メソッド名と指定された引数に基づいて名前が生成されます。

以下に示すように、テストの実行順序を制御できます。

                    [Test]
            [TestCase("value1", TestName = "ExpressionTest_1")]
            [TestCase("value2", TestName = "ExpressionTest_2")]
            [TestCase("value3", TestName = "ExpressionTest_3")]
            public void ExpressionTest(string  v)
            {
                //do your stuff
            }

ここでは、メソッド名の"ExpressionTest"サフィックスに番号を付けました。

アルファベット順に並べられた任意の名前を使用できます。TestCase属性を参照してください。


0

テストフレームワークが実行するテストを選択する順序に依存しないでください。テストは分離され、独立している必要があります。彼らは、彼らのためにステージを設定したり、彼らの後に片付けたりする他のいくつかのテストに依存すべきではありません。また、テストの実行順序に関係なく、同じ結果が得られるはずです(SUTの特定のスナップショット)。

少しググってみました。いつものように、一部の人々は(根底にあるテスト可能性/設計の問題を解決する代わりに)卑劣なトリックに訴えてきました

  • テストを実行する必要がある順に表示されるように、アルファベット順にテストに名前を付けます。ただし、NUnitは今後のリリースでこの動作を変更することを選択する可能性があり、その場合、テストは失敗します。現在のNUnitバイナリをソース管理にチェックインします。
  • VS(IMHOが「アジャイルツール」で間違った動作を奨励する)には、MSテストフレームワークで「順序付きテスト」と呼ばれるものがあります。読書に時間を費やすことはありませんでしたが、同じ視聴者をターゲットにしているようです

参照:優れたテストの特性


特に統合テストと受け入れテストでは、実行時間の長いテストの前に実行時間の速いテストを実行したい場合があります。たとえば、ブログアプリでは、まずログインをテストします。その機能が機能しない場合、投稿も機能しないため、そのテストを実行しても意味がありません(ランナーを手動で停止できます)。しかし、テストを実行し続けようとすると、さらに時間がかかります。
マルセルバルデスオロスコ2012

@MarcelValdezOrozco-異なる物理DLLを介して、またはタグ/カテゴリを使用して、テストを分割することにより、その目標を達成できます。dll /カテゴリを順番に実行するビルドスクリプトを作成できます。一般に、テストの順序付けを許可すると、通常、隣接するテストへの依存関係が生じる結合テストが発生します(もちろん、時間の経過とともに)。などのNUnitの次の大きなリリースでAFAIR、テストの異なる順序付けをサポートするために起こっている、例えば、ランダム
Gishu

2
同じタイプのテスト(受け入れテストなど)をさらに分割しても意味がありません。ソースコード、ビルドスクリプト、テストスクリプト、プロジェクト構造など、あらゆる場所で不必要に別のDLLに分離すると、複雑さが増します。テスト。
Marcel Valdez Orozco、2012

放出(つまり基本的にすべてのモックライブラリ)が、順序が重要になる理由です。アプリドメインをアンロードすることはできません。nunitランナー(アセンブリ内のすべてのテストを実行している場合)は、少なくともその「修正」ですべてのテストに対してそのドメインを保持します。あるテストがタイプを作成して何かをテストし、別のテストがその作成されたタイプと順序が原因で競合する場合、それは不完全なテストではありません。これらは論理的に分離されています。nUnitが各「テスト」自体を適切に分離していないだけです。
ケリーエルトン

6
これは非常にひいきの答えであり、実際には単体テストにのみ適用され、実用的であることを完全に無視するので、面白くします。
ティムタム

0

TestCaseSourceキーを使用する場合は、override string ToString方法、その仕組み:

TestCaseクラスがあると仮定します

public class TestCase
{
    public string Name { get; set; }
    public int Input { get; set; }
    public int Expected { get; set; }
}

そして、テストケースのリスト:

private static IEnumerable<TestCase> TestSource()
{
    return new List<TestCase>
    {
        new TestCase()
        {
           Name = "Test 1",
           Input = 2,
           Expected = 4
        },
        new TestCase()
        {
            Name = "Test 2",
            Input = 4,
            Expected = 16
        },
        new TestCase()
        {
            Name = "Test 3",
            Input = 10,
            Expected = 100
        }
    };
}

Testメソッドで使用して、何が起こるかを見てみましょう。

[TestCaseSource(nameof(TestSource))]
public void MethodXTest(TestCase testCase)
{
    var x = Power(testCase.Input);
    x.ShouldBe(testCase.Expected);
}

これは順番にテストされず、出力は次のようになります。

ここに画像の説明を入力してください

したがって、次のoverride string ToStringようにクラスに追加したとします。

public class TestCase
{
    public string Name { get; set; }
    public int Input { get; set; }
    public int Expected { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

結果が変わり、次のようなテストの順序と名前が取得されます。

ここに画像の説明を入力してください

注意:

  1. これは、テストで名前と順序を取得する方法を説明するための例にすぎません。順序は数値/アルファベット順に取得されるため、10個を超えるテストがある場合、テスト01、テスト02 ...テスト10、テスト11などを作成することをお勧めします。あなたはテスト1を作成し、ある時点でテスト10がテスト1、テスト10、テスト2 ..などになるでしょう。
  2. 入力と期待値は、任意のタイプ、文字列、オブジェクト、またはカスタムクラスにすることができます。
  3. 順序の他に、ここでの良い点は、より重要なテスト名が表示されることです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.