debugging 在.NET核心和Visual Studio程式码中两柴xUnit测试

6ie5vjzr  于 2022-11-14  发布在  .NET
关注(0)|答案(6)|浏览(167)

我在一台Mac电脑上运行.NET Core 1.0和Visual Studio代码。
我有一个控制台项目和一个测试项目。我已经安装了launch.json,这样我就可以调试控制台项目了。
如何设置启动配置以启动单元测试并附加调试器?

0pizxfdo

0pizxfdo1#

如果您安装了最新的软件和库,调试起来会非常容易:

正如您从屏幕截图中看到的,只需点击“debug test”并调试它!

6xfqseft

6xfqseft2#

请参阅Tyler Long's answer。最新版本的Visual Studio程式码不需要下列步骤:)
我制作了a repository来演示。
首先,我能让调试器命中测试的唯一方法是添加一个文件Program.cs,从xUnit控制入口点,然后手动添加代码进行测试。这并不理想,但我想您不会经常这样做,而且很容易将其恢复正常。

程序.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"
  },

项目.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单元测试项目。

gc0ot86w

gc0ot86w3#

我能够在整个xUnit项目上运行调试器,启动配置如下所示。我检查了“debug test”链接(在上面的@泰勒Long响应中)通过C#(Omnishart)VS代码扩展进行的调用,以了解这一点。注意事项:1)您必须提供dotnet程序的 * 绝对 * 路径2)您必须提供.nuget/packages文件夹的 * 绝对 * 路径(即您不能使用~/$HOME/)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
}
6jygbczu

6jygbczu4#

点击debug test代码透镜图标的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);
        }
    }
}

然后,这允许您将Visual Studio代码调试器附加到正在运行的testost.dll。只需选择.NET Core Attach,然后选择dotnet testhost.dll

cgfeq70w

cgfeq70w5#

**编辑:**快速修复(每个Cyrille Belfort):

1.按Ctrl+Shift+P组合键
1.搜索并选择 *OmniSharp:选择项目 *
1.选择测试项目
1.进入

**原始答案:**要让OmniSharp检测这两个项目而无需在它们之间切换,您可以创建一个解决方案。

1.创建解决方案:

cd YourProjectRootDirectory
dotnet new sln --name YourSolutionName

1.添加项目:

dotnet sln add .\src\YourProject.csproj
dotnet sln add .\test\YourProject.Tests.csproj

1.重新加载VS代码:
1.按Ctrl+Shift+P组合键
1.搜索并选择 * 开发人员:重新加载窗口 *
1.进入
1.选择解决方案:
1.按Ctrl+Shift+P组合键
1.搜索并选择 *OmniSharp:选择项目 *
1.选择解决方案
1.进入
之前:

之后:

感谢@lp的评论。

2lpgd968

2lpgd9686#

@埃里克·埃斯基尔森,帮我自己解决了
需要注意的是,我只使用了步骤4,并选择了我正在处理的csproj,而不是构建解决方案。
奇怪的是只有那些CodeLens测试链接似乎受到了影响。Omnisharp提示和/或Inlay提示在整个工作区都在工作。

相关问题