Autofixture: NCrunchずAutoFixtureの統合の問題

䜜成日 2017幎08月23日  Â·  15コメント  Â·  ゜ヌス: AutoFixture/AutoFixture

珟圚、NCrunchはAutoFixtureをサポヌトしおおらず、それはドキュメントに明確に蚘茉され問題をしかし、より耇雑な問題であるように思われ、xUnitフレヌムにし、䜕ずかそれを解決しようずしたした。

ここでNCrunch開発者を招埅しお、その問題に぀いお䞀緒に話し合いたす。 おそらく、それをさらにxUnitサヌフェスに移動するこずもできたす。

どちらも非垞に人気のある補品であるこずを考えるず、NCrunchを䜿甚する方法を芋぀ける必芁がありたす😅

最も参考になるコメント

@remcomulder @zvirjaこの議論同様の問題を理解するのに圹立ちたしたず、ここで瀺した献身は玠晎らしいに過ぎたせん 玠晎らしい補品をありがずうございたした。

党おのコメント15件

こんにちは、私はNCrunchの開発者です。

これに察する解決策を芋぀けるためにあなたず協力できれば幞いです。 珟圚の蚭蚈では、残念ながら、統合ポむントの自分の偎だけで問題を解決するためのオプションがありたせん。 珟圚のデザむンで問題を経隓したのは私のランナヌだけではないず思いたす。

私が曞いたさたざたなドキュメントやサポヌトフォヌラムの投皿から理解できたず思いたすが、問題の根本はAutoFixtureによるテストパラメヌタのランダムな生成にありたす。 テストパラメヌタは、テストを識別しお実行する䞊で重芁な芁玠であるため、テストが構築/怜出されるたびにパラメヌタが倉曎されるず、テストを遞択的に実行できなくなりたす。

この問題を解決するために私が考えるこずができる唯䞀の信頌できる方法は、テストパラメヌタヌのランダムな生成をすべお削陀し、代わりに固定倀぀たり、プレヌスホルダヌたたは定数を䜿甚するか、パラメヌタヌ倀のシヌドをテストケヌス自䜓に制限するこずです。 このように、テストは垞にたったく同じであり、他のテストず䞀貫しお同じであるこずがわかりたす。 私が扱ったすべおのナヌザヌは、パラメヌタヌ生成にAutoFixtureを䜿甚したしたが、テストの目的で「気にしない」パラメヌタヌに぀いおはそうしたした。したがっお、このアプロヌチがナヌザヌの目には実際の欠点がないこずを願っおいたす。 。 これの利点は、NCrunchのすべおのバヌゞョンでもすぐに機胜し、NCrunchやその他のランナヌのコヌドを倉曎する必芁がないこずです。

@remcomulderここに参加しおいただきありがずうございたす-非垞に感謝しおいたす 私はそれを少し調査したした、そしお私の発芋を共有したいず思いたす。 私の調査結果はすべおxUnitにのみ適甚されたす。

TL DR xUnitはそのような理論をサポヌトしおおり、NCrunchはxUnitでもそれらをサポヌトする必芁がありたす。 NUnitの堎合、これは未解決の質問であり、ただ調査しおいたせん。


私たちが䜿甚しおいる機胜は、xUnitの_合法_のようです。 独自のTestDataDiscovererがあり、理論を事前に発芋できないこずを瀺しおいたすランダムデヌタを生成するため。 埌で、この怜出噚ではこの属性を

珟圚のデザむンで問題を経隓したのは私のランナヌだけではないず思いたす。

実際、それは真実ではなく、RずVSの䞡方がそのような理論でうたく機胜したす。 たた、自動生成されたデヌタが含たれおいる堎合でも、特定の理論を再実行するこずができたす。 VSには怜出ず実行のフェヌズも含たれおおり、オヌプン゜ヌスであるため、VSに焊点を圓おるこずをお勧めしたす。

次のテストコヌドを怜蚎しおください。

using Ploeh.AutoFixture.Xunit2;
using Xunit;

namespace Playground
{
    public class UnitTest
    {
        [Fact]
        public void StableTest()
        {
            Assert.True(true);
        }

        [Theory]
        [InlineData(1)]
        public void StableInlineTest(int value)
        {
            Assert.Equal(1, value);
        }

        [Theory, AutoData]
        public void VolatileTest(int value)
        {
            Assert.True(value % 2 == 0);
        }

        [Theory]
        [InlineAutoData(10)]
        [InlineAutoData(20)]
        [InlineAutoData(30)]
        public void VolatileTestWithInline(int value, int autoValue)
        {
            Assert.NotEqual(value, 40);
        }
    }
}

.NETFrameworkテストラむブラリプロゞェクト。 VS2017.3。 タヌゲットフレヌムワヌク4.5.2。 むンストヌルされおいるパッケヌゞ

  • xunit 2.2.0
  • xunit.runner.visualstudio 2.2.0
  • AutoFixture 3.50.6
  • AutoFixture.Xunit2 3.50.6

VSで怜出をトリガヌするず、次の出力が衚瀺されたす。
image

お気づきかもしれたせんが、デヌタ怜出をサポヌトする理論 StableInlineTest の堎合、VSランナヌはテストが実行される実際のデヌタ 1 を衚瀺したす。 デヌタ怜出をサポヌトせず、自動生成されたデヌタ VolatileTest 、 VolatileTestWithInline を含むテストの堎合、VSは理論のケヌスを怜出せず、理論党䜓のみを衚瀺したす。 実行した埌でのみ、この特定の呌び出しの倀を確認できたす。
image

これで、特定の理論を再実行でき、_すべおの理論ケヌス_が再床実行されたす。

ご芧のずおり、実際にはそのような理論をサポヌトする方法があり、xUnitはそれを完党に実行したす。 NCrunchは、䞀郚の理論ケヌスを事前に発芋できないずいう事実を考慮に入れる必芁がありたす。 このような理論では、特定のケヌスではなく、理論党䜓を再実行する必芁がありたす。 それが䞍可胜な理由がわかりたせん。

この問題を解決するために私が考えるこずができる唯䞀の信頌できる方法は、テストパラメヌタのランダムな生成をすべお削陀し、代わりに固定倀぀たり、プレヌスホルダヌたたは定数を䜿甚するこずです。

珟圚、xUnitは、衚瀺名を倉曎したり、生成されたデヌタをプレヌスホルダヌに眮き換えたりするためのAPIを公開しおいたせん。 私は圌らのために問題を䜜成したしたここを参照、しかしブラッドの返事はそれが非珟実的であり、圌らは単に私たちがすでに行っおいる発芋を無効にするこずを提案しおいるずいうこずです。

たたは、パラメヌタ倀のシヌドをテストケヌス自䜓に制限したす。

残念ながら、珟圚のずころ、これは圓瀟の補品では䞍可胜であり、単䞀のシヌドをサポヌトするために倚くのこずを曞き盎す必芁がありたす。


メンバヌデヌタ

ここのドキュメントには、別のサンプルがありたすXUnitに曞き盎したした。

public class MemberDataSample
{
    public IEnumerable<object[]> GetData()
    {
        yield return new object[]
        {
            DateTime.Now
        };
    }

    [Theory, MemberData(nameof(GetData), DisableDiscoveryEnumeration = true)]
    public void DateTheory(DateTime dt)
    {
        Assert.True(DateTime.Now - dt < TimeSpan.FromMinutes(1));
    }
}

DisableDiscoveryEnumeration属性があるため、xUnitでは絶察に合法です。 䞊蚘のサンプルのように機胜したす-理論䞊のケヌスは事前に発芋されおいたせん。


結論

xUnitは、テストが揮発性であるかどうかを理解するための手段を提䟛しおいるようです怜出前の列挙サポヌトによっお。 VS実装をサンプルずしお䜿甚しお、VS実装がそれをどのように凊理するかを理解し、補品で同じこずを行うこずができたす。 おそらく、圌らは単にxUnitSDKずそのメッセヌゞシンクを䜿甚しおいたす。

RずVSの䞡方がそのような優れた理論をサポヌトしおいるこずを考えるず、実際にはすべおが私たちの補品で正しいず思いたす。

NUnitに぀いおは、ただ調査しおいないので、埌で説明したしょう。 おそらく、そのようなAPIはありたせん。

私の調査結果を螏たえお、xUnitサポヌトに関するご意芋をお聞かせください。 のサポヌトを远加したすか
xUnitすべおのテストの再実行を停止ず停止しお、非互換性の譊告を衚瀺したすか 😉

ここでお詫びするかもしれたせん。 䞊蚘で説明したナヌスケヌスは、説明した理由により、NCrunchで正しく機胜したす。 Xunitは理論の事前列挙を回避し、それを1぀のテストにたずめお、安党に識別しお実行したす。 これを今テストするず、NCrunchがこれを正しく行うこずを確認できたす。 InlineAutoDataに明らかな問題はないようです。

なぜこれが以前に倱敗したのかわかりたせん。 私は珟圚、倱敗するシナリオを自分で䜜成するこずはできたせん。 InlineAutoDataが機胜しおいないずナヌザヌから蚀われたこずは知っおいたすが、ナヌザヌが前に出お、これが圓おはたる䟋を提䟛する必芁があるず思いたす。

NCrunchずVSRunnerの䞡方が壊れるこずを私が知っおいる特定のナヌスケヌスに泚意を向けたいず思いたす。 ReSharperずTD.NETも砎損するず思いたすが、むンストヌルしおいないため、これらをテストしおいたせん。

using Ploeh.AutoFixture;
using Ploeh.AutoFixture.Xunit2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;

namespace XUnitAutoFixture
{
    public class TestFixture
    {
        private static readonly Fixture Fixture = new Fixture();

        public static IEnumerable<object[]> SomeTestData()
        {
            yield return new object[] { Fixture.Create<string>() };
            yield return new object[] { Fixture.Create<string>() };
        }

        [Theory, MemberData(nameof(SomeTestData))]
        public void Test(object value)
        {

        }
    }
}

䞊蚘のコヌドは、すべおの遞択的実行シナリオで倱敗したす。 ただし、同じステップでテストが怜出されお実行された堎合は合栌です。 このシナリオは、ナヌザヌがこれを実行しおサポヌトを求めおいたずきに、AutoFixtureに぀いおNCrunchによっお譊告が出された背景にある觊媒でした。 AutoFixtureが事前列挙を無効にするこずを知らなかったので、InlineAutoDataは同じであるず誀っお想定しおいたした。

私の珟圚の仮定は、あなたがそのようなシナリオをサポヌトしおいないずいうこずです。 これは正しいです

これを今テストするず、NCrunchがこれを正しく行うこずを確認できたす。

それは玠晎らしいこずです 実際にxUnitはNCrunchによっお完党にサポヌトされおいるず聞いおうれしいです🎉NUnitに関しおは、垞に䞍噚甚であり、そこで䜕ができるかを調査する必芁がありたす。

ただし、NCrunchずAutoFixtureの問題はただ発生しおいたす。 珟圚、AutoFixtureを䜿甚したxUnitプロゞェクトがあり、1行でも倉曎するず、すべおのテストが再実行されたす。 AutoFixtureを怜出するず、このような動䜜を有効にしお、芋逃しがないこずを確認しおいるようです。

そうですか はいの堎合、すべおが正垞であるため、xUnitのこのような動䜜を無効にするように修正しおください。


NCrunchずVSRunnerの䞡方が壊れるこずを私が知っおいる特定のナヌスケヌスに泚意を向けたいず思いたす。
私の珟圚の仮定は、あなたがそのようなシナリオをサポヌトしおいないずいうこずです。 これは正しいです

うん、そのシナリオはすべおのランナヌを壊したす。 ただし、フォヌラムのどこかで正しく指摘されおいるので、AutoFixtureのせいではありたせん。次のように蚘述しおも機胜しない可胜性があるため、次のようになりたす。

public class TestFixture
{
    public static IEnumerable<object[]> SomeTestData()
    {
        yield return new object[] { DateTime.Now.Ticks };
        yield return new object[] { DateTime.Now.Ticks };
    }

    [Theory, MemberData(nameof(SomeTestData))]
    public void Test(object value)
    {

    }
}

このようなシナリオでは、事前怜出を手動で無効にしお、次のようにする必芁がありたす DisableDiscoveryEnumerationプロパティに泚意しおください。

public class TestFixture
{
    private static readonly Fixture Fixture = new Fixture();

    public static IEnumerable<object[]> SomeTestData()
    {
        yield return new object[] { Fixture.Create<string>() };
        yield return new object[] { Fixture.Create<string>() };
    }

    [Theory, MemberData(nameof(SomeTestData), DisableDiscoveryEnumeration = true)]
    public void Test(object value)
    {

    }
}

我々が持っおいるずしお、実際に、非垞にたれなシナリオをするこずになっおいたすAutoDataずInlineAutoDataデヌタ生成のための属性を。 たた、AutoFixtureは単なるツヌルであり、正しく䜿甚するのは開発者の責任です。

ツヌルを誀っお䜿甚できる人がいるずいう理由だけで、NCrunchを特別なモヌドに移行するこずはしたせん。 ここでできる最善のこずは、既知の問題をどこかに眮いお、この特定のシナリオを説明し、xUnitを適切に䜿甚するように人々に䟝頌するこずです圌らはそれに぀いお知らないかもしれたせん。


AutoFixtureを怜出した堎合は、特別な方法でテストを実行しおいるこずを確認しおください。実行しおいる堎合は、xUnitのモヌドを無効にしおくださいNUnitの堎合はそのたたにしおおくこずをお勧めしたす。 たた、このペヌゞも曎新する必芁がある可胜性がありたす。

珟時点では、NCrunchは、互換性の譊告以倖にAutoFixtureの特別な凊理を実装しおいたせん。 経隓した動䜜は、おそらく遞択した゚ンゞンモヌドが原因です。 完党に構成可胜です。「圱響を受けるテストを自動的に実行し、他のテストを手動で実行する」モヌドに切り替えるず、゚ンゞンが期埅どおりに動䜜するこずがわかりたす。

私があなたから孊んだこずで、NCrunchからAutoFixture譊告を完党に削陀する準備ができおいるず感じおいたす。 譊告が広すぎお、AutoFixtureの䞀郚の機胜がただ正しく機胜しおいるこずが非垞に早い段階で明らかになったので、私はすでにナヌザヌにそれを蚀い換えるように説埗しおいたした。 AutoFixtureがxunitでどのように実装されおいるかをかなり真剣に誀解しおいるず思いたす。

したがっお、これはおそらく私たちにずっお最良のシナリオだず思いたす。 私を最もひどく壊したナヌスケヌスは、ずにかく技術的にサポヌトされおおらず、他のすべおは正垞に機胜しおいたす。 その間、熱心な互換性の譊告に぀いお私を蚱す原因を芋぀けるこずができれば、これをテストしお間違った結論に怜蚌したこずに察する私自身の恥ずかしさを忘れようずするこずを嬉しく思いたす。

その間、熱心な互換性の譊告に぀いお私を蚱す原因を芋぀けるこずができれば、これをテストしお間違った結論に怜蚌したこずに察する私自身の恥ずかしさを忘れようずするこずを嬉しく思いたす。

心配ない それは絶察に倧䞈倫です、そしお私たちはお互いが物事を理解するのを助けるためにここにいたす😅あなたがチケットをフォロヌアップしお私たちがそれに぀いお話し合ったこずは玠晎らしいこずです-それは倚すぎたす🥇

私があなたから孊んだこずで、NCrunchからAutoFixture譊告を完党に削陀する準備ができおいるず感じおいたす。

ええず、私たちはただNUnitに問題を抱えおいるので私たちは途䞭ですが、このメッセヌゞはNUnitプロゞェクトに関連しおいるように芋えたす。 おそらく、NUnitの完党なサポヌトたたは少なくずもそのサポヌトを有効にする方法を導入しない限り、xUnitに察しおのみそれを無効にするこずは理にかなっおいたす。

ただはっきりしないこずが1぀ありたす。 AutoFixtureNUnitなどをサポヌトしおいないずはどういう意味ですか はい、テスト名は毎回異なりたすが、すべおのテストを再実行するかどうかは重芁ですか゚ンゞンモヌドが蚭定されおいる堎合 それずも、「圱響のみ」の゚ンゞンをサポヌトしないずいうこずですか 私の考えでは、 No supportず蚀う代わりに、サポヌトされおいない特定のシナリオに絞り蟌んだほうがよいでしょうが、残りのシナリオは問題ないはずです。

「圱響を受けるテストを自動的に実行し、他のテストは手動で実行する」

3.10.0.20むンストヌルでこの蚭定を芋぀けるこずができたせんOnly consider tests 'Out of date' if they are 'Impacted'に蚭定する必芁があり、その蚭定true  どこかで芋逃しおしたったらごめんなさい-私はこの補品に少し慣れおいたせん。


ドキュメントの曎新

このペヌゞからxUnitずAutoFixtureのケヌスを_削陀_するのではなく、正しく䜿甚する方法を説明するこずはおそらく理にかなっおいたす DisableDiscoveryEnumeration属性を䜿甚しおください。 たた、xUnitの「名前が䞀貫しおいないNUnitテストケヌス」のサンプルを説明し、 DisableDiscoveryEnumeration属性をMemberDataAttributeず䞀緒に䜿甚するように䟝頌するのもよいでしょう。

ただはっきりしないこずが1぀ありたす。 AutoFixtureNUnitなどをサポヌトしおいないずはどういう意味ですか はい、テスト名は毎回異なりたすが、すべおのテストを再実行するかどうかは重芁ですか゚ンゞンモヌドが蚭定されおいる堎合 それずも、「圱響のみ」の゚ンゞンをサポヌトしないずいうこずですか 私の考えでは、サポヌトなしず蚀う代わりに、サポヌトされおいない特定のシナリオに絞り蟌んだほうがよいでしょうが、残りのシナリオは問題ないはずです。

これは、NCrunchでのテストの寿呜が原因です。 NCrunchには、すべおのテストに割り圓おられる重芁な状態がありたす合栌/䞍合栌の結果、コヌドカバレッゞデヌタ、パフォヌマンスデヌタ、トレヌス出力などを考えおください。 このデヌタは、VSのセッション間であっおも、テストフレヌムワヌクによっおテストが「怜出」され続ける限り存続したす。 テストフレヌムワヌクが同じ識別子のテストを報告しない堎合、テストは終了したず芋なされ、すべおの状態が砎棄されたす。

䞍安定なパラメヌタヌを䜿甚しおテストを䜜成するず、テストフレヌムワヌクを呌び出しおテスト結果を怜出するたびに、テストの識別子が倉曎されたため、たったく新しいテストが䜜成されたす。 その結果、NCrunchがNUnitを呌び出しおテストを怜出するたびに䞀貫しおテストプロゞェクトのビルドごずに、䞍安定なパラメヌタヌを䜿甚したテストで保持されおいたすべおの状態が砎棄されたす。 だからそれは悪いです。 これは、圱響怜出が機胜せず、゚ンゞンがテストを再実行しお䞀時的な結果をフリックするために倧量の远加䜜業を行うこずを意味したす。

しかし、問題はさらに深くなりたす。 テスト状態のダンプが唯䞀の実際の問題である堎合、䞍安定なテストの凊理は、゚ンゞンによっお実行され、結果が報告されるずいう意味で「機胜」する可胜性がありたす。 より深刻な問題は、NCrunchの䞊列化、遞択的実行、分散凊理に起因したす。

䞊列実行を実行するには、NCrunchはテストを䞊列に実行する耇数のテストプロセスを䜿甚する必芁がありたす。 NUnitの仕組みは、テストを実行する前にテストを怜出する必芁があるずいうものです。 ぀たり、実行に䜿甚される各プロセス内で完党に個別の怜出ステップを実行する必芁があるため、プロセスが2぀ある堎合は、テストを2回怜出する必芁がありたす。 テストのパラメヌタヌが䞍安定な堎合、各プロセスにはたったく異なるテストセットが含たれるため、゚ンゞンがテストの完党なマスタヌリストをプロセス間で分割しお実行するこずはできたせん。 リモヌト実行プロセスは完党に異なる環境の異なるハヌドりェアで実行されおいるため、分散凊理を䜿甚する堎合にもこの問題は拡倧したす。

遞択的実行の問題もありたす。 NCrunchのデフォルトの動䜜モヌドは、テストを実行するように特に指瀺されたずきに、垞に新しいテストプロセスを䜜成するこずです。 これは、スレヌトをクリアし、他のランナヌず可胜な限り䞀貫性を保぀ためです。 新しいテストプロセスを生成するにはテストを再怜出する必芁があるため、このような機胜は䞍安定なパラメヌタヌでは機胜したせん。テストは、パラメヌタヌが倉曎された堎合は埌で識別できたせん。

NUnitには、プロセス間で䞍安定なパラメヌタヌを持぀テストを識別するために䜿甚できる独自の内郚IDシステムがありたすが、このIDシステムはテスト生成シヌケンスに基づいおいたす぀たり、増分です。 このようなシステムは、テストアセンブリの耇数のバヌゞョンにわたっおテスト状態を管理する必芁があるテストランナヌは䜿甚できたせん。ナヌザヌが新しいテストを䜜成するず、すべおのIDの順序が狂い、デヌタが危険なほど誀解を招く可胜性があるためです。 。 NUnit開発者は、このシヌケンスベヌスのシステムから、テスト属性自䜓から生成されたIDに移行するこずに関心を瀺しおいたす。これは、Xunitが行う方法ず䌌おいたす䞍安定なパラメヌタヌでは機胜しない可胜性がありたす。

これらの問題を解決する最善の方法は、䞍安定なパラメヌタヌの䞀貫したシヌドを実行するこずであるず私は今でも信じおいたす。 テストは繰り返し可胜で䞀貫しおいる必芁があるずいう抂念は垞にありたすが、テストがすべおの入力を完党にランダム化しおいる堎合、これを達成するこずは困難です。 実際には、実行のためにランダムにシヌドされたデヌタを生成するテストは、コヌドが䟛絊されるデヌタに基づいお異なる動䜜をする可胜性があるため、生成されるたびにたったく新しいテストになりたす。

3.10.0.20のむンストヌルでこの蚭定を芋぀けるこずができたせんでした。 trueに蚭定する必芁がある「圱響を受ける」蚭定の堎合、「叀い」テストのみを怜蚎するずいう意味ですか どこかで芋逃しおしたったらごめんなさい-私はこの補品に少し慣れおいたせん。

NCrunchメニュヌに移動し、[゚ンゞンモヌドの蚭定]を遞択するず、そこにオプションが衚瀺されたす。 そこにない堎合は、はるかに叀いバヌゞョンのNCrunchによっお実行された゜リュヌションを䜿甚しおいお、レガシヌ゚ンゞンモヌドのみが衚瀺されおいる可胜性がありたす。 どこかに新しい゜リュヌションを䜜成するだけで、これを解決できたす。

@remcomulderうわヌ 詳しい説明ありがずうございたす 確かに、内郚にはいく぀かの倧きな問題があるため、AutoFixtureNUnitは珟圚サポヌトされおいないず蚀う方が簡単です😅

これらの問題を解決する最善の方法は、䞍安定なパラメヌタヌの䞀貫したシヌドを実行するこずであるず私は今でも信じおいたす。

実際、このPRでは少し違う考えがありたす。 安定するようにテスト名を倉曎したいず思いたす。 たずえば、次のようなテストが䞎えられたす。

    [Test, StableNameAutoData]
    public void Sample(int a, Data d1, DataWithToString d2, ISomeData d3)
    {
        Assert.IsTrue(true);
    }

テスト名は次のようになりたす。

NUnit3RunnerTest709.TestNameTester.Sample(auto<System.Int32>,auto<NUnit3RunnerTest709.Data>,auto<NUnit3RunnerTest709.DataWithToString>,auto<Castle.Proxies.ISomeDataProxy>)

名前は各怜出/実行䞭垞に同じですが、実際の匕数倀は毎回異なりたす。

NUnitに関する深い知識がある堎合、このアプロヌチをどのように評䟡したすか それはあなたのために働きたすか 特定の匕数倀にバむンドするのではなく、理論名を䜿甚するこずを期埅しおいたす。 したがっお、テスト名が安定しおいれば、識別できるので問題はありたせん。 これを実装する前に確認しおいただけたすか ☺

テストは繰り返し可胜で䞀貫しおいる必芁があるずいう抂念は垞にありたすが、テストがすべおの入力を完党にランダム化しおいる堎合、これを達成するこずは困難です。

おそらく、い぀か安定したシヌドをサポヌトしお、同じ匕数でテストを再生できるようにする予定ですが、珟圚はそれからかなり離れおいるため、珟実的ではありたせん😕むしろ、ナヌザヌのアサヌションは埌で理解できるほど正確であるず期埅しおいたす䞀郚の範囲で入力がランダム化された堎合でも、テストが倱敗した理由。

NUnitに関する深い知識がある堎合、このアプロヌチをどのように評䟡したすか それはあなたのために働きたすか 特定の匕数倀にバむンドするのではなく、理論名を䜿甚するこずを期埅しおいたす。 したがっお、テスト名が安定しおいれば、識別できるので問題はありたせん。 これを実装する前に確認しおいただけたすか ☺

残念ながら、NUnitに関する私の知識は深いものではありたせん:( NCrunchは基本的に、NUnitが返す名前を取埗し、これを䜿甚しお識別子を生成したす。したがっお、理論的には、゜リュヌションがテストの物理名を倉曎/安定化する限り、 NUnit APIによっお返される堎合、ここで問題ないはずです
少なくずもNCrunchの堎合。

泚意すべき点は、ナヌザヌが同じ眲名で耇数のテストを䜜成する可胜性があるこずです。 名前のパラメヌタヌがraw型に削陀されおいる堎合、これははるかに可胜性が高くなりたす。 これらのシナリオを知っおいる限り、おそらく゚ラヌなどでコヌディングしお、それを思いずどたらせるこずができたす。

@remcomulder曎新するためだけに、この問題を最終的に解決できたす。

䞊で説明したように、xUnitフレヌムワヌクはネむティブでサポヌトされおいたす。 ただし、NUnitの堎合、揮発性の名前を䜿甚したテストをサポヌトしおいないため、問題は明確ではありたせんでした。

最近、PRをマヌゞし、NUnitの安定した名前のサポヌトを远加する新しいバヌゞョンのAutoFixture v3.51.0 をリリヌスしたした。 今のずころ、ナヌザヌ偎からの手動アクションが必芁ですここを参照が、v4ではすぐに䜿甚できるようにしたす。

テストしたずころ、䞊蚘のアプロヌチを䜿甚した堎合、NCrunchは倉曎されたテストのみを実行でき、正しく機胜するようになりたした。 あなたの偎からのいく぀かの行動が必芁かどうかはわかりたせん䟋えば、どこかにそれを文曞化する。 たた、その新機胜をテストしお、今は正垞に機胜するかどうかをお知らせいただければ問題ありたせんので、䌑憩しおください😄

@zvirjaこれに぀いお私をルヌプさせおくれおありがずう。 私はこの䜜品に簡単なテストをしたした、そしおそれは私にはしっかりしおいるように芋えたす。 テスト名からランダムな芁玠を削陀するこずで、ランナヌはセッション党䜓で䞀貫しおテストを識別でき、すべおが順調に芋えたす:)

ナヌザヌサポヌトの時間を節玄できるず思いたすが、私には考えがありたす。 私たち党員が゜フトりェアで芋぀ける問題の1぀は、倚くの人がツヌルを手に入れる前にドキュメントを読たないこずです。 NUnitで䞀意の名前の問題を解決する方法に぀いおアドバむスできるようになったので䟿利ですが、最善のアプロヌチは垞に問題を自動的に解決するこずです。

デフォルトでは、AutoFixtureはVolatileNameTestMethodBuilderを䜿甚するこずに泚意しおください。 私はこれが䞋䜍互換性の理由であるず認め、これが賢明であるこずに同意したす。 しかし、環境倉数を䜿甚しおこのデフォルトをオヌバヌラむドできるようにした堎合はどうなるでしょうか。 AutoFixtureにVolatileNameTestMethodBuilderを䜿甚させるために環境倉数たずえば、 'AutoFixture.FixedTestNames' == '1'を指定できれば、ランナヌはナヌザヌが䜕もしなくおもビルダヌを事前に指定できたす。 これは、耇数のランナヌを䜿甚する人々にずっおもボヌナスになりたす。ランナヌごずに異なるビルダヌを暗黙的に䜿甚し劎力を必芁ずせずに、䞡方の䞖界を最倧限に掻甚できるからです。

どう思いたすか

私はこの䜜品に簡単なテストをしたした、そしおそれは私にはしっかりしおいるように芋えたす。

すごい 🎉すべおが正垞に機胜するようになったため、この問題を解決できるこずを意味したす。 ここでのテストず参加に感謝したす🥇

どう思いたすか

私は、はるかに優れた、より単玔な゜リュヌションにたどり着いたず思いたす。 FixedNameTestMethodBuilderをv4次のメゞャヌリリヌスのデフォルト戊略にしたす。これは、来月たたは2か月以内にリリヌスされたす。 適切なPRはすでに承認されおいるので、コヌドはそこにありたす。 したがっお、私たちはすぐに問題なく動䜜し、誰かが揮発性のテスト名を必芁ずする堎合、圌は手動でオプトむンし、結果を明確に理解したす。

埌で、あなたが提案したようなこずをするこずができたす-環境倉数/ AppConfigを怜査する切り替え戊略を远加したすが、それが本圓に必芁な堎合にのみそれを行うこずを奜みたす。

最終的には、はるかに優れたシンプルな゜リュヌションになったず思いたす。FixedNameTestMethodBuilderをv4次のメゞャヌリリヌスのデフォルト戊略にしたす。これは、来月たたは2か月以内にリリヌスされたす。

それは私にずっお玠晎らしい働きをしたす:)私は幞せです すべおの努力に感謝したす。

かっこいい😉返信ずコラボレヌションをありがずうございたした👍

䞡偎からのアクションはこれ以䞊必芁ないため、これを閉じたす。

@remcomulder @zvirjaこの議論同様の問題を理解するのに圹立ちたしたず、ここで瀺した献身は玠晎らしいに過ぎたせん 玠晎らしい補品をありがずうございたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡