2016-07-01 18 views
22

私はMac上で.NET Core 1.0とVisual Studioコードを実行しています.NET CoreとVisual Studioのxunitテストのデバッグコード

私はコンソールプロジェクトとテストプロジェクトを持っています。私はコンソールプロジェクトをデバッグできるようにlaunch.jsonをセットアップしました。

ユニットテストを起動してデバッガを接続する起動設定を設定するにはどうすればよいですか?

答えて

8

編集:Tyler Long's answerを参照してください。以下の手順はVSコードの最新バージョンでは必要ありません。

私はrepoをデモンストレーションしました。

最初に、テストにヒットするようにデバッガを取得できる唯一の方法は、Program.csを追加し、XUnitからエントリポイントを制御し、テストするコードを手動で追加することでした。理想的ではありませんが、あなたはこれを非常に頻繁にやっていないと思っています。それを通常の状態に戻すのは簡単です。

のProgram.cs:

​​

次へ]を、project.jsonあなたproject.jsonに次の行を追加します。

"buildOptions": { 
    "emitEntryPoint": true, 
    "debugType": "portable" 
    }, 

project.json:

{ 
    "version": "1.0.0-*", 
    "testRunner": "xunit", 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "debugType": "portable" 
    }, 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "type": "platform", 
     "version": "1.0.0" 
    }, 
    "xunit": "2.2.0-beta2-build3300", 
    "dotnet-test-xunit": "2.2.0-preview2-build1029" 
    }, 
    "frameworks": { 
    "netcoreapp1.0": { 
     "dependencies": { 
     "Microsoft.NETCore.App": { 
      "type": "platform", 
      "version": "1.0.0" 
     } 
     } 
    } 
    } 
} 

これにより、 xunitユニットテストプロジェクトをバグします。

+2

それは私のために動作します。ところで、あなたは '' testRunner ': "xunit" 'のコメントをつけたりコメントを外す必要はありません。 –

+0

私は自分の答えを更新しました。ありがとう! –

+2

私は質問を投稿した時点で正しいので、この回答を受け入れることになります。VSCode 1.2で単体テストをデバッグするための洗練された方法はありませんでした。 – driis

65

あなたは最新のソフトウェアやライブラリをインストールした場合、それはデバッグに超簡単です:

enter image description here

あなただけの「デバッグテスト」をクリックして、それをデバッグ、スクリーンショットから見ることができるように!

+3

どのようにすべてのテストをデバッグしたり実行したりしますか? – gerrard00

+0

@ gerrard00すべてのテストをデバッグする方法がわかりません。すべてのテストを実行するには、 'dotnet test'を実行します。 –

+4

これをテストプロジェクトのproject.jsonに追加するだけで、これをbuildOptionsセクションに追加することができます。 "debugType": "portable"。これは、 "この文書のためのシンボルがロードされていません"という問題を解決します –

12

xUnitプロジェクト全体で、 launch configという複雑なデバッガを実行することができました。私はC#(Omnisharp)VS Code extensionを介してこれを理解するために、 "デバッグテスト"リンク(上記の@Tyler Long応答で)を呼び出すことを調べました。注意事項:1)絶対のドットネットプログラムへのパスを提供する必要があります。2)絶対パスを指定する必要があります(~/または$HOME/を使用できません)。以下の例では、私のテストプロジェクト名前空間の名前はTestsです。この起動設定をしたら、ブレークポイントを設定し、この設定を使用してデバッガを起動すると、すべてのブレークポイントにヒットするはずです。 debug testコードレンズアイコンをクリックする

{ 
    "name": "Debug xunit tests", 
    "type": "coreclr", 
    "request": "launch", 
    "preLaunchTask": "build", 
    "program": "/usr/local/share/dotnet/dotnet", 
    "args": [ 
    "exec", 
    "--runtimeconfig", 
    "${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.runtimeconfig.json", 
    "--depsfile", 
    "${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.deps.json", 
    "--additionalprobingpath", 
    "/Users/jdoe/.nuget/packages", 
    "/Users/jdoe/.nuget/packages/dotnet-test-xunit/1.0.0-rc2-build10015/lib/netcoreapp1.0/dotnet-test-xunit.dll", 
    "${workspaceRoot}/AppNameHere/bin/Debug/netcoreapp1.0/AppNameHere.dll", 
    "-namespace", 
    "Tests" 
    ], 
    "cwd": "${workspaceRoot}", 
    "stopAtEntry": false 
} 
+2

ありがとう、これは素晴らしいことです!これを作業者と少し簡単に共有できるようにしたのは、.nugetディレクトリへのシンボリックリンクを追加することです。 'ln -s〜/ .nuget'を実行し、'/Users/jdoe'を '$ {workspaceRoot}'に変更する - 理想的ではありませんが、一回限りの設定です(また、あなたのVCS設定で '.nuget /'を無視する!) –

+0

ありがとう、非常に便利 –

5

Tyler's answerは、単一のテストをデバッグする最も簡単な方法です。

すべての単体テストをテストする方法は、while(!Debugger.IsAttached) Thread.Sleep(500);をテストの中に追加することです。これにより、デバッガを接続するまでテストが待機します。

using System; 
using System.Diagnostics; 
using System.Threading; 
using NUnit.Framework; 

namespace SomeNamespace 
{ 
    [TestFixture] 
    public class SomeClassTests 
    { 
     [Test] 
     public void ShouldDoTest() 
     { 
      while(!Debugger.IsAttached) Thread.Sleep(500); 
      Assert.That(true, Is.True); 
     } 

     [Test] 
     public void ShouldDoTest2() 
     { 
      while(!Debugger.IsAttached) Thread.Sleep(500); 
      Assert.That(true, Is.True); 
     } 
    } 
} 

これにより、実行中のtesthost.dllにvscodeデバッガを接続することができます。単純なSELECT .Net Core Attach、その後dotnet testhost.dll

Debug .Net Core Attach

+0

驚くほど便利 – Rugdr

関連する問題