【问题标题】:Can XUnit tests be run from within the project to be tested?XUnit 测试可以在要测试的项目中运行吗?
【发布时间】:2021-11-04 01:33:51
【问题描述】:

我想知道是否可以在与源代码相同的项目中进行 xUnit 测试?
我添加了 xUnit 引用,但是当我执行测试时,Visual Studio 告诉我该项目没有测试。我也尝试使用Microsoft.NET.Test.Sdk,但在这种情况下会显示错误,因为该项目有两个入口点。

public class Test
{
    [Fact]
    public void TestMethod()
    {
    }
}

测试的实现和更好的命名将在稍后进行......

【问题讨论】:

  • 您能解释一下为什么您希望在同一个项目中进行测试吗?这样做你会得到什么好处?我问是因为这很不寻常,就像我从未见过有人这样做一样。
  • 你如何尝试运行单元测试?
  • @GuillaumeRaymond 就像我说的,我想知道这是否可能。对于其他语言,我只知道将它们放在同一个项目中。
  • @Chetan 是的,我尝试通过 VS 上下文菜单和 Dotnet-CLI 运行它。

标签: c# .net xunit


【解决方案1】:

通过 xUnit Test 编译获得控制台应用程序有点棘手。实现这一目标的一种方法是调整控制台应用程序 csproj。

在 PropertyGroup 部分添加以下语句:

<GenerateProgramFile>false</GenerateProgramFile>

最终的 csproj 应该如下所示:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net5.0</TargetFramework>
        <GenerateProgramFile>false</GenerateProgramFile>
    </PropertyGroup>

  <ItemGroup>
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
        <PackageReference Include="xunit" Version="2.4.1" />
        <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
  </ItemGroup>

</Project>

有关此主题的进一步阅读,请参阅 Andrew Lock 的这篇有趣的博客文章:"Program has more than one entry point defined" for console apps containing xUnit tests

【讨论】:

  • 感谢您的回答。我可以重现它,但在我的情况下,CodeClass 将有一个 Main-Method,它被检测为程序的第二个入口点 (CS0017)。调整我的问题:您可以在控制台应用程序中嵌入测试吗?
  • @tobias 您使用的是哪个版本的 .Net Framework?
  • 我正在使用 .Net (Core) 5.0。
  • @tobias 我重写了我的答案,因为使用控制台应用程序有一个技巧可以让它编译
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多