Visual StudioからNUnitをデバッグモードで実行するにはどうすればよいですか?


120

最近取り組んでいるC#のテストフレームワークを構築しています。ワークスペース内にNUnitをセットアップし、コンポーネントをテストするための新しいプロジェクトを用意しています。ユニットテストをNunit(v2.4)からロードすると、すべてうまくいきますが、デバッグモードで実行していくつかのブレークポイントを設定するのが本当に役立つところまでたどり着きました。

私はいくつかのガイドからの提案を試しましたが、すべてがテストプロジェクトの「デバッグ」プロパティの変更を提案しています。

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

私はそこでコンソールバージョンを使用していますが、GUIの呼び出しも試みました。デバッグしようとすると、どちらも同じエラーが発生します。

Cannot start test project 'TestDSP' because the project does not contain any tests.

これは、通常、\ DSP.nunitをNunit GUIにロードし、テストを行う場所だからです。

私は問題がVSがそれ自身のテストフレームワークを実行したいということかもしれないと考え始めています、そしてそれがNUnitテストを見つけることができない理由です?

編集:テストフィクスチャについて質問する人にとって、TestDSPプロジェクトの.csファイルの1つは、おおよそ次のようになります。

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

...私はC#とNUnitテストフレームワークにかなり慣れていないので、重要な情報の一部を逃した可能性があります;-)

最終的な解決策:大きな問題は、私が使用したプロジェクトでした。Other Languages -> Visual C# -> Test -> Test Projectプロジェクトタイプを選択するときに... を選択した場合、Visual Studioは、私の知る限り、独自のテストフレームワークを使用しようとします。代わりに通常の C#クラスライブラリプロジェクトを選択する必要があります。そうすると、選択した回答の手順が機能します。


あなたのテストフィクスチャクラスは私には問題なく見えるので、あなたが提案したように、プロジェクト内の何かである必要があります。
Patrick McDonald、

2
この質問のように見えます:stackoverflow.com/questions/247900/… 答えは同じです
Patrick Desjardins

回答:


46

私はあなたがジョンを試しているのと同じテクニックを使用していますが、/ assemblyフラグはありません。

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

TestDSP.dllにはすべてのTestFixtureが含まれていますか?

テストプロジェクトはソリューションのスタートアッププロジェクトではないため、テストプロジェクトを右クリックして[デバッグ]-> [新しいインスタンスを開始]を選択してテストを実行します。


1
私はあなたが提案したものを試しました(/アセンブリを削除しています)が、違いはありません。新しいインスタンスを起動すると、エラーが発生します。TestDSPプロジェクトを作成したときに、組み込みのVisualStudioテストプロジェクトテンプレートから作成したため、間違ったテストフレームワークを探していることがほとんどだと思います。
ジョンケージ

3
ようやく動作しました。それを止めていたのはプロジェクトオプションだったので、私は正しかった-標準のクラステンプレートを使用してテストプロジェクトを再作成すると、問題が解決した。
ジョンケージ

1
/run*コマンドライン引数にテストの実行を自動的に開始する引数も追加すると役立ちます...私はブログの投稿で(画像を使用して)すべてまとめました。
Robert Koritnik 2012年

6
Robertの(非常に便利な)ブログ投稿(erraticdev.blogspot.com/2012/01/…)をチェックアウトしない場合:.NET 4.0以降の場合、これもnunit.exe.configに追加する必要があると思います。 :<startup> <supportedRuntime version = "4.0" /> </ startup>。
devuxer 2012年

3
追加情報:NUnitの新しいバージョン(今日の最新バージョンはv2.6.1です)では<supportedRuntime version="v2.0.50727" />、nunit.exe.configでコメント化する必要があります。
devuxer 2012

102

NUnitテストをデバッグする必要がある場合は、nunit-agent.exe「Debug | Attach to Process」を使用してNUnit GUIアプリケーションに接続し、GUIからテストを実行するだけです。テスト(またはテストしているコード)のブレークポイントにヒットします。私はあなたの質問を誤解していますか、それともあなたにとってうまくいきますか?


7
(および他のユーザーの)情報:VSのExpressエディションでは、Debug | Attachは使用できません。
Richard

15
NUnitの[設定]ダイアログで[Visual Studioサポートを有効にする]を選択する必要があることに注意してください-> IDEサポート
Julio Garcia

8
.NET 4.0以降では、これもnunit.exe.configに追加する必要があると思います<startup> <supportedRuntime version="4.0" /> </startup>
devuxer 2012年

1
これは、正しいプロセスにアタッチするための簡単なショートカットです(パッケージマネージャーコンソールで実行):($ dte.Debugger.LocalProcesses |?{$ _。Name.EndsWith( "nunit-agent.exe")})。Attach()
バート

7
参考までに、「nunit.exe」ではなく「nunit-agent.exe」と呼ばれるプロセスにデバッグをアタッチする必要があります。それ以外の場合、ブレークポイントは無視され、なぜ不思議に思うのでしょうか
ジェニー・オライリー

21

次のような行を削除するだけです

<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

プロジェクトファイルから。この行は基本的にVS.Netにテストプロジェクトであることを伝えます。したがって、「テストプロジェクトを開始できません」。ここで参考までに、最初のGuidは「テストだ」と言い、2番目は「C#だ」と言っています。それらのGUIDについては、http://www.mztools.com/Articles/2008/MZ2008017.aspxを参照してください。


18

@Justinからの回答に加えて、NUnit 2.6の詳細を以下に示します。

NUnit 2.6を使用して、エージェントではなくnunit.exeまたはnunit-console.exeにアタッチします。@Justinが記した設定は少し異なります。以下は、nunit.exe.configの例です(nunit-console.exe.configにも同じ)。

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

.NET 4テストプロジェクトの場合、ブレークポイントにヒットするには、コメントで示されているように、コメント化するか、v2.0行を削除する必要があります。これを行うと、.NET 4.0テストプロジェクトをデバッグすることができました。


v2.0.50727nunitを使用してVS2005から.NET 2アセンブリをデバッグするときに、この行だけで成功しました。(このv4行により、VS 2005のデバッガーは接続できませんでした。)
Martin Ba

17

NUnit 2.4以降を使用している場合は、次のコードをSetUpFixtureクラスに追加できます。(これは古いバージョンでも実行できますが、と同等の処理を行うSetUpFixtureか、テスト自体にコピーする必要があります。)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

何をDebugger.Launch()行うことは、あなたがNUnitの内部で実行]をクリックしたときに表示するには、次のダイアログ原因です。

JITデバッガダイアログ

次に、プロジェクトを開いた状態で実行中のVisual Studioのインスタンス(スクリーンショットの2番目)を選択すると、デバッガーが接続され、ブレークポイントや例外がVisual Studioに表示されます。


12

Nunit 3.0.1(VS2013を使用しています)で、メインメニュー> [テスト]> [ウィンドウ]> [テストエクスプローラー]から開きます。次に、「テストエクスプローラー」でテストケースを右クリックすると、次のように表示されます。 ここに画像の説明を入力してください

お役に立てれば。


2
この回答をありがとう。他のすべてよりもはるかに簡単です。
dano 2017年

私はVS 2015でNUnit 2.5.9を使用していますが、「NUnit 2テストアダプター」という名前のVS拡張で動作しました。テストエクスプローラーウィンドウでテストを実行できます。
mggSoft 2019

6

Visual StudioのプラグインであるTestDriven.NETをインストールします。

そこからユニットテストアセンブリを右クリックして[テストの実行]をクリックし、スイート全体を実行するか、TestFixtureクラスを右クリックしてそのクラスのテストのみを実行するか、またはTestメソッドを右クリックしてそのメソッドのみを実行できます。

デバッグモードでテストにブレークポイントを設定する必要がある場合は、デバッガーでテストするオプションもあります。


2
170ドルは、そのようなツールには途方もなく急です。値段どっちか、誰か?
Ben Hardy

うん。そのようなお金のために、私はむしろJetBrains Resharperに投資したいと思います。それは、デバッグ統合と他の多くの生産性機能を備えたテストランナーを無料で提供します。
ローマ

Visual Studio 2012を使用すると、Nugetを備えたNUnitテストランナーを無料で入手できます。
Jon Limjap 2012

6

NUnititを試す-NUnitテストケースをデバッグするためのオープンソースのVisual Studioアドイン

ホームページ-http ://nunitit.codeplex.com/


単一のテストを実行するように指示する方法を見つけることができませんが、それはかなり良いことです(?)
Jon Cage


3

今写真付き:

  1. NUnit guiを実行し(ここから2.6.2をダウンロード)、次に移動しますFile -> Open Project

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

  1. .dllbinフォルダーからテストを選択します(C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll

  2. Visual Studioに移動しDebug -> Attach to processます([プロセスにアタッチ]ウィンドウが開きます)

  3. リストから下にスクロールして選択しnunit-agent.exe、クリックしますAttach

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

  1. この時点で、テストのブレークポイントは(くぼみから)熟した赤に変わります。

  2. クリックRunするNunit Guiと、ブレークポイントがヒットします...

これにより時間を節約できることを願っています。


2

コンソールまたはGUIを機能させることができても、ブレークポイントがヒットしない場合は、アプリがNUnitとは異なる.NETランタイムを実行していることが原因である可能性があります。nunit-console.exe.config / nunit.exe.configにランタイムが指定されているかどうかを確認します(構成はnunit exeと同じディレクトリにあります)。スタートアップノードを使用してランタイムを指定します。

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>

2

プロジェクトのパスにスペースが含まれている場合(例: "New Project")は<path>\bin\Debug\New Project\Quotes.Domain.Tests.dll、[Start Option]-> [Command Line Arguments]のプロジェクトパスを二重引用符で囲みます。

私はこれを理解するために多くの時間を費やしました。


1

パトリック・マクドナルド氏の発言について

テストプロジェクトはソリューションのスタートアッププロジェクトではないため、テストプロジェクトを右クリックして[デバッグ]-> [新しいインスタンスを開始]を選択してテストを実行します。

テストクラスライブラリを適用しようとしたが、パスに関するエラーが発生したため、「コマンドライン引数」を削除しようとしましたが、幸いにも期待どおりに機能しました。


0

間違ったライブラリを使用しようとしているようです。NUnitは、使用しているdllにTestFixturesが含まれている場合にのみ起動できます。

TestDriven.Netの+1。何度も使用する機会がありました。http://testdriven.net/purchase_licenses.aspxにあるライセンスに従って、評価目的で個人用バージョンをダウンロードできます。


最近の編集を見てください-私はテストフィクスチャを持っていますが、正しくセットアップしていなかった可能性もあります。
Jon Cage

0

MSTestでも同じエラーが発生しました。「テスト出力」ウィンドウで、一部のテストに重複したIDがあり、ロードできないことがわかりました。重複するテストをすべて削除し、プロジェクトを開始したときにテストを実行できるようになりました。


0

テストフレームワークハンドルのビルドインと同様に、Visual Studio内からテストを実行できるようにする拡張機能「Visual NUnit」もあります。拡張機能マネージャーで確認してください。


0

Visual Studioを開く--->プロジェクト-> [プロパティ]を選択-> [デバッグ]を選択-> [外部プログラムを開始]を選択し、NUnitのパスをそこに設定します(例:外部プログラムを開始= C :\ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe)---->保存

これを設定した後、「デバッグ」をクリックするだけです


0

私にとっての解決策は、nunit構成ファイルを適応させることでした。4.5-.Netフレームワークとx64ビルドオプションでnunitを使用するには、起動タグに1行追加する必要がありました(サポートされているランタイムバージョン)。

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

その後、Testproject Debug-> Start new instanceを右クリックして開始できます。以前は、プロジェクトを再び手動でプロセスにアタッチする必要がありました。

私のデバッグプロパティは、C:\ Program Files(x86)\ NUnit 2.6.4 \ bin \ nunit.exeで、テストする.dllの場所の引数が含まれていました。

詳細:.NET 4.0でテストするためのnunit


-1

これが役立つかどうかを確認してください 。VisualStudioでNUnitを追加する方法

(RighteousRant)個人的にはこのアプローチは好きではありませんが、コードをテスト駆動しているときにデバッガが必要な場合、コードの動作に十分な自信がなく、コードがどのように動作するかを理解していないため、「臭い」です。あなたにそれを伝えるデバッガ。TDDを正しく実行すれば、デバッガーが不要になります。「デバッガーをNUNitにアタッチ」は、まれな場合や、他の人のコードを使用している場合にのみ使用してください。


私は無駄にそこに提案を試みました。あなたは明らかに良い鼻を持っています。実装の最初のブロックで取得した出力が、テスト参照に対してまったく異なる回答を取得しているため、コードが機能しないことはわかっています。だから今、私は問題の原因を見つけるために深く掘り下げようとしています。私はそれをプログラムの残りの部分と切り離して実行したいのです(したがって、デバッグモードで単体テストを実行する必要があります)。記録のために、これは別の人のアルゴリズムから変換された、他の誰かが書いたコードです:-/
Jon Cage

それで、それは私の最後の行の後半の節に分類されます:)動作させることはできませんが、残念です。プロセス(Alt + D + P)に
住まわ

ここには匂いはありません-特定の環境で失敗するテストケースがあります(非常に間違った結果が返されます)。その理由を理解する必要があります。それを行うには、コードを修正してテストをどこでもパスできるように、それをデバッグして、この環境でどこが失敗するかを調べたいと思います。これは標準的な赤/緑タイプのもののようです...
BrainSlugs83 '16

@ BrainSlugs83-私がこれを書いてから久しぶり。私は(まだ)主な作業方法としてテストをデバッグすることに反対しています。エッジケース-デバッガーにドロップしても大丈夫です。それでも私はおそらく最初にロギングステートメントを挿入します。私は、デバッガでCode-Crash-Adjustサイクルに合理化されたCode-Crash-Debug-Adjustサイクルを使用している人が多すぎることを観察したという事実に由来すると思います継続的に。
岐阜2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.