2017-06-07 4 views
0
Windows 10 
Visual Studio 2017 
TeamCity 2017.1.2 
GitHub 

私は予想通りローカルに動作するVSソリューションを使用しています。メインプロジェクトにはいくつかのパッケージ依存関係があります。テストプロジェクトには、メインプロジェクトへのプロジェクト参照があります。 VSローカルコンパイルは成功します。メインプロジェクトの参照+依存関係はMyProject/bin/debugにコピーされます。テストプロジェクトのリファレンス+依存関係はMyProject.Tests/bin/debugにコピーされます。 ReSharperローカルテストが成功しました。TeamCity:NUnitはターゲットアセンブリの依存関係を見つけることができません

しかし私のTCプロジェクトでは、テストを実行する際に問題があります。

GitHubからpullを実行し、Visual Studio (sln) buildを実行し、テストを実行するにはNUnit.ConsoleRunnerを実行します。ビルドステップの必要性を示すファイルが見つかりませんでした(パッケージ依存関係アセンブリが見つかりません)依存するアセンブリをアーティファクトとして保存し、それをテスト出力ディレクトリにコピーします。 VSステップを構築することを示している

C:\TeamCity\buildAgent\work\64f706c42d79250c\{main-project}\bin\Debug\{dependency}.dll 

C:\TeamCity\buildAgent\work\64f706c42d79250c\{tests-project}\bin\Debug\{dependency}.dll 

:しかし、私は、メイン・プロジェクトおよびテスト・プロジェクトの両方に依存アセンブリが存在見つけるエージェントのワークディレクトリを見て

{dependency}.dllを期待通りにビンにコピーしました。

なぜNUnitはそれを見つけることができませんか?

[19:27:48][Step 5/5] MyProject.dll 
[19:27:48][MyProject.dll] MyProject.UnitTests.MyTest 
[19:27:49][MyProject.UnitTests.MyTest] System.IO.FileNotFoundException : Could not load file or assembly 'MyProjectDependency, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 
[19:27:49] 
[MyProject.UnitTests.MyTest] at ReferencingCode() 
    at MyProject.MyClass.Answer() in C:\TeamCity\buildAgent\work\64f706c42d79250c\MyProject\MyClass.cs:line 9 
    at MyProject.UnitTests.MyTest() in C:\TeamCity\buildAgent\work\64f706c42d79250c\MyProject\UnitTests.cs:line 10 
[19:27:51][Step 5/5] Failed tests detected 

出力dirsにはVS BuildNUnitのステップのために異なっている場合、私は思ったんだけど?しかし、私のエージェント作業ディレクトリは、私のローカルVSソリューションディレクトリと同じです - だからTCはNUnit作業ディレクトリを探していますか?

+0

私はあなたの問題とあなたが何をしているのか分かりません。単体テストはアセンブリを使用しません。彼らはソースコードを使用します。それはホワイトボックステストです。つまり、単体テストはコードを直接操作します。 –

+0

私のテストプロジェクトは私のメインプロジェクトのproject-refを持っています。 VSソリューションビルドは、メインプロジェクトのアセンブリとその依存関係アセンブリをテストプロジェクトの 'debug/bin'フォルダにコピーし、' ReSharper'はそれらのアセンブリに対してテストを実行します。 – BaltoStar

答えて

0

2つの完全に別々の出力ディレクトリがあるように見えます.1つはテストプロジェクトの下にあり、もう1つはメインプロジェクトの下にあります。テストはもちろん、テストアセンブリを含むディレクトリで実行されます。

出力メッセージは、メインアセンブリがテストアセンブリディレクトリにコピーされていると思われます。テストプロジェクトのリファレンスはローカルコピーを呼び出す必要があります。テストアセンブリとメインアセンブリの両方にスタックトレース内のエントリがあるので、わかります。しかし、依存するアセンブリはおそらくあなたのテストによって参照されないので、コピーされません。少なくともそれは私がそれを読む方法です - ディレクトリの内容を見て確認してください。

すべての出力ディレクトリを同じにすることでこれを解決できますが、使用しているディレクトリ構造を変更する必要があります。簡単な修正は、依存するアセンブリへの参照をテストプロジェクトに追加し、ローカルコピーをtrueに設定することです。

+0

エージェントの作業ディレクトリを調べるとローカルのVSと同じフォルダ構造が表示されますpost-compile:main + testサブフォルダ、それぞれ '/ debug/bin'、依存関係アセンブリ*はテストアセンブリビンにあります。ステップはそこにそれをコピーしています。あなたは、TCが実行中のテストに専念するいくつかの出力ディレクトリを作成していると言っていますか?これはエージェントのどこに配置されますか?デスクトップVSコンパイル/実行テストでは必要ないので、テストプロジェクトに依存関係のコピーを追加するのは好きではありません - TCのためだけにリファレンスを追加すると、コードを扱う人に混乱が生じるでしょう-ライン。 – BaltoStar

+0

TeamCityによって生成された '.nunit'ファイルを調べます。それは、実行時に物事がどこにあるのかを示します。または、アセンブリの位置を表示するテストを実行するだけです。ソリューションをローカルで使用する場合、すべてが期待どおりに機能します。 – Charlie

0

テストをローカル、またはTeamCityで実行するには、テストプロジェクトに、テストするプロジェクトへのプロジェクト参照が必要です。他の方法では動作しません。どのようにそれをテストするか分かっていますか?したがって、テストプロジェクトで参照を確認し、ビルドが「デバッグ」と「リリース」として実行されているときに、出力が同じ場所にあることを確認してください。

ちょっとしたことに、TCに実際のビルドとテストをさせるのは簡単なことでは問題ありませんが、トラブルシューティングは非常に難しいです。 PSakeでPowerShellスクリプトを作成し、 "テスト"タスクを作成することをお勧めします。こうすることで、ローカルでスクリプトを実行でき、TeamCityはローカルで実行しているスクリプトと同じスクリプトを使用できます。

+0

私のテストプロジェクトには、メインプロジェクトへの参照があります。 VSローカルコンパイルは成功します。メインプロジェクトのrefs +依存関係は 'MyProject/bin/debug'にコピーされます。テストプロジェクトのrefs +依存関係は 'MyProject.Tests/bin/debug'にコピーされます。ローカルテストが成功する。すべてが期待通りです。私の問題はビルドエージェントにあります。エージェントワークディレクトリがローカルソリューションと同じに見えるのは困っています。「MyProject.Tests/bin/debug」には、テストするアセンブリとその依存関係が含まれています。だからなぜ 'NUnit.Console'でそれを見つけることができないのですか? – BaltoStar

+0

NUnitがあなたの参照を見つけることができない理由を判断するのに十分な情報がありません。ビルドコマンドをコピーして、エージェントのコマンドラインから実行し、何を得るかを見ることができます。だからこそ、私はローカルで使うスクリプトを作ることを提案した。 –

関連する問題