我有一个简单的dotnet核心类库和一个XUnit测试方法:

TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.console" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runners" Version="2.0.0" />
  </ItemGroup>

</Project>

BasicTest.cs:
using Xunit;

namespace TestLib
{
    public class BasicTest
    {
        [Fact(DisplayName = "Basic unit test")]
        [Trait("Category", "unit")]
        public void TestStringHelper()
        {
            var sut = "sut";
            var verify = "sut";

            Assert.Equal(sut, verify);
        }
    }
}

如果我在CLI中输入项目并输入dotnet build,项目就会生成。如果我输入dotnet test,我得到这个:

C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.

Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.

Test Run Aborted.

我需要更改哪些内容才能运行测试?

如果有帮助的话,VS Code也没有在它的测试资源管理器中显示测试。


当前回答

如果您正在使用xUnit,请确保您的项目类型不是netstandd。由于xUnit不支持netstandard,请将其更改为coreapp2.0或其他。

其他回答

这发生在我将Microsoft.NET.Test.Sdk从v16.2.0更新到v16.4.0后,使用<TargetFramework>netcoreapp2.0</TargetFramework>。更新到<TargetFramework>netcoreapp3.0</TargetFramework>解决了我的问题。

我在Nunit (.net core 3.1)项目中也遇到了同样的问题。 我使用的是Microsoft.NET.Test.SDK v16.6.1,我将版本降级到15.9.0。 它开始工作了

在我的例子中,有必要包含对MsTest的引用。TestAdapter模块使用nuget。

MSTest的一个新项目。TestFramework和Microsoft.Net.Test.Sdk不足以运行单个单元测试。

注意,在我的例子中,我使用的是一个针对。net框架4.8而不是。net核心的测试项目。尽管如此,我坚信这一修正也适用于该平台

我正在构建一个netcoreapp2.2测试项目,然后试图从bin文件夹中运行dotnet vstest。我注意到微软测试dll来自:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />

没有输出到我的bin文件夹。而不是只是构建,我运行了一个发布,而不是在输出文件夹中包含必要的dll,然后我就可以从那里运行dotnet vstest。

如果你的目标是netstandard2.0,这是行不通的。如果你使用。net Core。确保.csproj包含以下行:

<TargetFramework>网芯应用3.0</TargetFramework>

还包含Microsoft.NET.Test.Sdk包