Nunit: 新しいクロヌン埌のnunit.framework.testsでのナニットテストの倱敗

䜜成日 2018幎06月25日  Â·  31コメント  Â·  ゜ヌス: nunit/nunit

nunitの新しいクロヌンを取埗し、Windows 10Professionalで実行されおいる最新のNUnit3テストアダプタヌ3.10、テストの䞊列実行を䜿甚しおVisual Studio 2017コミュニティ15.7.4で゜リュヌションを開き、[デバッグ-AnyCPU]を遞択したした。 "そしおビルドを抌したす。

BUILDING.mdを読んだ埌、nunit.framework.tests- *およびnunitlite.tests- *に起因しない障害は無芖する必芁があるようです。

しかし、ゲヌトから出お、nunit.framework.testsから2぀の倱敗が発生したす-*

最初の゚ラヌ

Test Name:  TestCaseSourceCanAccessWorkDirectory("C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20")
Test FullName:  NUnit.Framework.TestContextTests.TestCaseSourceCanAccessWorkDirectory("C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20")
Test Source:    C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\TestContextTests.cs : line 110
Test Outcome:   Failed
Test Duration:  0:00:00.001

Result StackTrace:  at NUnit.Framework.TestContextTests.TestCaseSourceCanAccessWorkDirectory(String workDirectory) in C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\TestContextTests.cs:line 112
Result Message: 
Expected string length 34 but was 50. Strings differ at index 34.
  Expected: "C:\\Users\\ace.olszowka\\source\\nunit"
  But was:  "C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20"
  -------------------------------------------------^

゜ヌスを芋るず、これらの倀が同䞀である必芁があるこずがわかる限り、これがどのように可胜であったかはわかりたせん _workDirectoryずテストデヌタは䞡方ずもTestContext.CurrentContext.WorkDirectory蚭定されおいたす私の唯䞀のおそらく私の偎の蚭定が悪いために、ある皮の競合状態があるず思いたすか

2番目の゚ラヌ

Test Name:  StackTracesAreFiltered("WarningInBeginInvoke",4)
Test FullName:  NUnit.Framework.Assertions.WarningTests.StackTracesAreFiltered("WarningInBeginInvoke",4)
Test Source:    C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\Assertions\WarningTests.cs : line 292
Test Outcome:   Failed
Test Duration:  0:00:00.004

Result StackTrace:  at NUnit.Framework.Assertions.WarningTests.StackTracesAreFiltered(String methodName, Int32 maxLineCount) in C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\Assertions\WarningTests.cs:line 310
Result Message: 
Multiple failures or warnings in test:
  1) (Warning message)
  2) Expected the number of lines to be no more than 4, but it was 5:

 1. at NUnit.TestData.WarningFixture.<>c__DisplayClass45_0.<WarningInBeginInvoke>b__0()
 2. at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
 3. at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
 4. at System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(Object o)
 5. at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
(end)

私はこのテストがここでやろうずしおいるこずに迷いたした。 しかし、私の限られた理解に基づくず、このコヌドはコヌルスタックの倉曎に非垞に敏感であるように思われたす。これは、.NET Frameworkの最近の倉曎が原因である可胜性がありたすか

たた、NUnitLite.Tests.CommandLineTestsで倱敗するすべおのテストケヌスが発生したす。これが予期しない堎合は、喜んで掘り䞋げたす。

ビルドがCIで枡されおいるのを芋るず、これらはおそらく私の偎の構成の問題にすぎたせんが、これに぀いおBUILDING.mdには䜕も蚀及されおいないため、レポヌトに䟡倀があるず考えたした。

bug normal

党おのコメント31件

レポヌトありがずうございたす TestCaseSourceCanAccessWorkDirectoryずCommandLineTestsがテスト゚クスプロヌラヌで機胜しないこずを確認したした。 ランナヌや䞊列凊理から独立させる方法を考え出す必芁がありたす。 @ nunit / framework-team䜕かアむデアはありたすか

2番目の゚ラヌに぀いおは、それは嗅芚テストです。 それを5に䞊げるのは理にかなっおいたす。

以前は、NUnitテストにテスト゚クスプロヌラヌを䜿甚しないように指瀺したした。 他のチヌムメンバヌは、テスト゚クスプロヌラヌが、倚くの人にずっお、テストを実行するためのデフォルトの方法になっおいるず蚀っお反察しおいたす。

テストフレヌムワヌクをテストするずきに特定のランナヌが圹に立たないずいう前䟋は確かに十分にありたす。 テスト䞭のフレヌムワヌクのテストは非垞に特殊な状況であり、ほずんどのナヌザヌが遭遇する状況ではありたせん。 OTOH、チヌムが望むなら、アダプタヌを介しおテスト゚クスプロヌラヌで正垞に実行できるようにするこずを目暙にするかもしれたせん。

䜕をするにしおも、テスト゚クスプロヌラヌでNUnitテストを実行しおも珟圚は機胜しないこずを人々に䌝えるドキュメントを䜜成する必芁があるず思いたす。 その文脈で、それを機胜させるこずが目暙であるか、それが優先事項ではないかのどちらかが決定されおいるこずを圌らに䌝えるこずができたす。

アダプタヌの最初の䜜成者であり、フレヌムワヌクぞの長幎の貢献者ずしお、私は垞にNUnitの開発におけるテスト゚クスプロヌラヌの䜿甚を非難しおきたした。 それはただこの問題に関する私の芋解です。 ちなみに、今はコン゜ヌルを䜿甚しおCIのフレヌムワヌクをテストするのも奜きではありたせん!!!

決定がどうであれ、アダプタヌが原因であるかどうかにかかわらず、問題が発生した堎合は、実際のNUnitランナヌNUnitLiteたたはコン゜ヌルランナヌにナヌザヌを送り返す必芁があるず思いたす。 アダプタヌは、NUnitプロゞェクトの䞋にある堎合でも、基本的にサヌドパヌティのランナヌず同等です。

倖から芋たFWIW文曞化されおいる限り、どちらの方法でカットするかは私には関係ありたせん。

箱から出しお、開発者ずしお、私が内郚で䜿甚しおいるのず同じ方法を䜿甚しおいる新しいプロゞェクトに遭遇したずきに、通垞行うこずを実行しようずしたす。

  1. コヌドのクロヌンを䜜成する
  2. README.md/BUILD.md/HACKING.mdをお読みください
  3. ビルドを詊みたす倉曎なし
  4. 統合されたランナヌを介しおナニットテストを実行したす。
  5. すべおがうたくいったら、もので遊んでください。

以前はこれはReSharperのdotCoverでしたが、「ほずんど機胜する」フリヌ/オヌプン゜ヌス゜フトりェアの代替手段がある堎合、ラむセンスコストは小さなショップ/個々の開発者にずっおは狂っおいるので、私たちはそれをやめようずしおいたす。

統合開発環境の抂念には私の意芋では倚くのこずがありたす。ワヌクフロヌから飛び出す必芁がないこずは非垞に䟿利です。それが私たちがそれを行う理由です。

ただし、私の頭の䞭で問題のないコン゜ヌルランナヌたたは他のランナヌを䜿甚するこずが予想される堎合は、それを文曞化しおください。

NUnitで開発し、フレヌムワヌクで䜜業しおいる堎合、特別な方法R、独自のアダプタヌで凊理を行うランナヌを混圚させるず、問題が混乱する可胜性があるず思いたす。 ランナヌでテストする前に、フレヌムワヌクが単独で正しく機胜するこずを知りたいです。 そのため、私自身の仕事では、CIを開発しおロヌカルで実行するずきに、nunitliteを䜿甚しおテストしたす。 テスト゚クスプロヌラヌでNUnitを開発したい堎合は、CIをロヌカルで実行し、問題があるように芋える堎合はnunitliteたたはnunit3-consoleにフォヌルバックする必芁がありたす。

特定のリリヌスからnunitテストを実行しおいるだけの人にずっおは、もっず自由床があるず思いたす。

CIを正芏化する必芁がありたす。おそらく、すべおのフレヌムワヌクテストにNUnitLiteを䜿甚し、次にコン゜ヌル、VSTestアダプタヌ、゚ンドツヌ゚ンドテストにUWPランナヌを䜿甚したす。

CIが安定しおいるず仮定するず、Test Explorer、ReSharper、NCrunch、およびCIスクリプトの間に埮劙な違いがあれば問題ないようです。 これらのIDE内ツヌルを無芖する必芁があるず蚀うこずは、私が貢献ぞの障壁ず芋なしおいるこずであり、それは私のワヌクフロヌでもないため、誀りです。 私の理想的なワヌクフロヌ

  1. 既存のテストを芋぀けるか、新しいテストを䜜成したす
  2. そのテストフィクスチャを固定しお、入力䞭にテストをすばやく再実行できるようにしたすさらに良いこずに、継続的テストを開始したす
  3. 倉曎を実装する
  4. Gitコミットを䜜成する前に、 .\build.ps1 -t testを実行しお、合栌ず䞍合栌が期埅どおりであるこずを確認したす
  5. 驚きがある堎合は、私が知らなかった圱響を受けたテストを芋぀けお固定し、ステップ3に進みたす。

テストがランナヌに䟝存しないずいうたれなシナリオでは、テストをランナヌに䟝存しないようにするのが難しいかどうかはわかりたせん。 これは、ReSharperおよびNCrunchシャドりコピヌに察しお埩元力を持たせたILMerge甚に䜜成した統合テストよりも悪いこずはありたせん。

@aolszowka私は、私たちが䜕をするにしおも、投皿ドキュメントを䜿いやすく最新の状態に保぀こずで、投皿者の時間を尊重する必芁があるずいうあなたの意芋に100同意したす。

@ jnm2私はあなたの「暙準的な」アプロヌチが奜きです。 テスト゚クスプロヌラヌですべおをスムヌズに動䜜させるのは簡単かどうかは疑問ですが、詊しおみる䟡倀はありたす。

nunitで䜜業しおいる人にずっお、より䜎いレベルのテストにい぀切り替えるかを知るこずは、䟝然ずしお有甚であり、䞍可欠です。

このアむデアを前進させるために私たちができる最倧のこずは、IMOは、別個のシステムずおそらく統合テストを確立するこずです。

これが根本的な原因である可胜性がありたす。 FrameworkControllerからXMLを取埗するためのテストを䜜成しおいるずきに、 TestContext.WorkDirectoryがC:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE倉曎されおいるこずに気付きたした。

https://github.com/nunit/nunit/blob/81fcc7c047c09fcb5a86989d0829716ca7d08e1e/src/NUnitFramework/framework/Api/DefaultTestAssemblyBuilder.cs#L137

コヌルスタック

>   nunit.framework.dll!NUnit.Framework.Api.DefaultTestAssemblyBuilder.Build(System.Reflection.Assembly assembly, string suiteName, System.Collections.Generic.IDictionary<string, object> options) Line 137    C#
    nunit.framework.dll!NUnit.Framework.Api.DefaultTestAssemblyBuilder.Build(string assemblyNameOrPath, System.Collections.Generic.IDictionary<string, object> options) Line 114    C#
    nunit.framework.dll!NUnit.Framework.Api.NUnitTestAssemblyRunner.Load(string assemblyNameOrPath, System.Collections.Generic.IDictionary<string, object> settings) Line 154   C#
    nunit.framework.dll!NUnit.Framework.Api.FrameworkController.LoadTests() Line 204    C#

これは、 TestContext.WorkDirectoryが静的な可倉状態であるためです。

https://github.com/nunit/nunit/blob/81fcc7c047c09fcb5a86989d0829716ca7d08e1e/src/NUnitFramework/framework/TestContext.cs#L96 -L101

぀たり、同時テストを含むすべおのテストで共有されたす。 WorkDirectoryに䟝存するテストを正しく行うには、 [NonParallelizable]マヌクを付ける必芁がありたす。

私はずっず前にこの問題に気づきたした。 どこかに問題がありたす。

NonParallelizableは十分ではありたせん。 いずれかのテストがWorkDirectoryを倉曎する堎合倚くのNUnitテストが行​​うように、それに䟝存する他のテストが倱敗する可胜性は十分にありたす。

これはすべお、テストが実行される順序に䟝存したす。これは、NUnitでは定矩されおいたせん。

䜜業ディレクトリは䞀床蚭定し、実行䞭は倉曎しないでください。 それ以倖はバグです。

実行コンテキストごずに独立した䜜業ディレクトリを蚱可できない理由はありたすか

@CharliePooleどうすればそれを実珟できたすか フレヌムワヌクは、コントロヌラヌ実行内で実行されるコントロヌラヌであるFrameworkControllerをテストするため、私たちは特別な立堎にありたす。

テストは別ずしお、 WorkDirectoryの意味は、「実行甚のすべおの出力ファむルを受信するためにナヌザヌが蚭定したディレクトリ」です。 したがっお、テストで倉曎できないようにする必芁がありたす。

私たち自身のテストでは、それを蚭定できる必芁がありたすが、正しく実行すれば、その蚭定が他のテストに圱響を䞎えるこずはありたせん。 私たちはおそらくそれを正しく行っおいたせん。 😜

ピンチでは、倉曎できないようにしお、テストを停止するこずができたす。 <ducks>

それは実際にはクヌルなアむデアです-静的フィヌルドが蚭定されおいるかどうかを远跡し、その埌は蚭定をスキップしたすか そうすれば、それは倉曎できず、 DefaultTestAssemblyBuilderがそれを蚭定するかどうかをチェックするテストが衚瀺されないので、問題ないはずです。

それを倉曎するNUnitテストがあり、倉曎できないようにするず倱敗する可胜性がありたす。

@oznetmaster怜玢したしたが、偶然を陀いお、それを倉曎するNUnitテストが芋぀かりたせんでした。 䜕か䟿利なものはありたすか

アヌカむブを怜玢する必芁がありたす。

すでに説明したこずを実行しお、CFビルドの問題を修正したした。 倀の蚭定は1回のみです。 nullであるこずを確認し、nullの堎合は、蚭定できるようにしたす。

                if (options.ContainsKey (FrameworkPackageSettings.WorkDirectory))
                    TestContext.DefaultWorkDirectory = options[FrameworkPackageSettings.WorkDirectory] as string;
                else
                    if (TestContext.DefaultWorkDirectory == null)
                        TestContext.DefaultWorkDirectory = Directory.GetCurrentDirectory ();

問題ずなったテストは、FrameworkPackageSettings.WorkDirectoryを含たないオプションを指定しおDefaultTestAssemblyBuilder.Buildを呌び出し、TestContext.DefaultWorkDirectoryがCurrentDirectoryによっお䞊曞きされるテストでした。 これは、WorkDirectoryが最䞊䜍の実行で蚭定されおいる堎合、テストによっお䞊曞きされ、埩元されないこずを意味したした。

同じアプロヌチを取るのが良いず思いたすか

私のために働きたす。 私のCFビルドはNUnitテストの100に合栌しおいたす。

@OmicronPersei数日以内にいる堎合は、 @ oznetmasterの修正を

はい 今晩やっおみたす

nunit3-vs-adapter528が他の問題を匕き起こしおいるため、このバグを実際に再珟するこずはできたせん。 アむデア

@OmicronPerseiああ。 わからない。 WorkDirectoryが正しく蚭定された.runsettingsを䜿甚するこずは、適切な回避策でしょうか

さお、私はそれを詊したした。 TestCaseSourceCanAccessWorkDirectory成功したすが、 StackTracesAreFilteredは、OP内の同じメッセヌゞ/スタックトレヌスで倱敗したす。

StackTracesAreFilteredを5に䞊げる必芁があるず思いたす。これは匂いテストであり、新しいフレヌムが远加されたかどうかを確認しお、制埡䞍胜になっおいないこずを確認できたす。

TestCaseSourceCanAccessWorkDirectoryはどうですか、それずもこのPRの範囲内ですか

ForTestCaseCanAccessWorkDirectory、 @ oznetmasterの修正はそれを解決したすか そうでない堎合は、さらに調査する必芁がありたす。

自分のマシンで問題を再珟できたせん。問題のテストに合栌したした。

心配はいりたせん、他の誰かがその郚分を行うこずができたす。 私もPRを小さくするのが奜きです。

家の掃陀をしようずしおいるだけです。 この問題がただ開いおいる必芁がある理由はありたすか、それずも䜕らかの解決策で閉じるこずができたすか WONTFIXであっおも。

いいえ、指摘しおいただきありがずうございたす。 閉鎖。

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