web-dev-qa-db-ja.com

.NET CoreおよびVisual Studio CodeでのxUnitテストのデバッグ

私はMacで、.NET Core 1.0とVisual Studio Codeを実行しています。

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

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

39
driis

タイラーロングの答え を参照してください。 Visual Studio Codeの最新バージョンでは、以下の手順は不要です。


リポジトリ を作成しました。

まず、デバッガにテストをヒットさせる唯一の方法は、ファイルProgram.csを追加し、xUnitからエントリポイントを制御し、テストにコードを手動で追加することでした。これは理想的ではありませんが、これを頻繁に行うことはないでしょうし、通常に戻すのは簡単です。

Program.cs:

using System;
namespace XUnitDebugging
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var test = new TestClass();
            test.PassingTest();
            Console.WriteLine("Enter text...");
            Console.ReadLine();

        }
    }
}

次に、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単体テストプロジェクトをデバッグできます。

13
Nick Acosta

最新のソフトウェアとライブラリをインストールすると、非常に簡単にデバッグできます。

enter image description here

スクリーンショットからわかるように、「デバッグテスト」をクリックしてデバッグするだけです。

130
Tyler Long

次のcomplicated起動構成を使用して、xUnitプロジェクト全体でデバッガーを実行できました。 「デバッグテスト」リンク(上記の@Tyler Long応答)がC#(Omnisharp) VS Code extension を介して行われている呼び出しを調べて、これを把握しました。注意事項:1)ドットネットプログラムへのabsoluteパスを提供する必要があります2)absoluteを提供する必要がありますパス(つまり、~/ または $HOME/).nuget/packagesフォルダーへ3)以下の例では、テストプロジェクトの名前空間の名前はTestsです。この起動構成を設定したら、ブレークポイントを配置し、この構成を使用してデバッガーを起動すると、すべてのブレークポイントにヒットするはずです。

{
  "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
}
12
Brady Holt

タイラーの答え _debug test_コードレンズアイコンをクリックすることは、単一のテストをデバッグする最も簡単な方法です。

すべての単体テストをテストする方法は、テスト内に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);
        }
    }
}
_

これにより、Visual Studio Codeデバッガーを実行中のtesthost.dllにアタッチできます。単純に_.NET Core Attach_を選択し、次に_dotnet testhost.dll_を選択します。

Debug .NET Core Attach

10
PiTrick