Visual Studio 2022无法运行XUnit测试。

4
我创建了一个EntityFramework ASP.NET解决方案,现在我正在尝试创建一个XUnit测试项目来测试我所创建的不同类。
我已经为我的Activity类创建了一个TestClass:
using LADS_Model;
using LADS_WebUI.Controllers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using Xunit;
using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;

namespace LADS_XUnit
{
    public class UnitTest_Activity
    {
        [TestClass]
        public class ActivityController
        {
            private List<Activity> GetTestActivities()
            {
                var testActivities = new List<Activity>();
                testActivities.Add(new Activity { Id = 1, Name = "Chaussure" });
                testActivities.Add(new Activity { Id = 2, Name = "Crevettes" });
                testActivities.Add(new Activity { Id = 3, Name = "Sandwich" });
                return testActivities;
            }

            [TestMethod]
            public void GetAllActivities_ShouldReturnAllActivities()
            {
                var testActivities = GetTestActivities();
                var controller = new ActivityController();

                var result = controller.GetTestActivities();
                Assert.Equals(testActivities.Count, result.Count);
            }
        }


    }
}

问题在于当我启动我的testClass时,测试确实出现在测试资源管理器中,但VS告诉我测试未执行,我不知道为什么,因为它没有显示任何错误或任何消息来解释为什么它没有执行。

capture of my test view

测试输出结果: 测试输出结果


2
打开“视图”菜单下的“输出”窗口,然后选择“显示来自:测试”的选项。查看错误信息。 - canton7
@canton7 我已经编辑了我的消息,并附上了测试输出结果。 - Luc as
4
等等,你说的是 xUnit 对吧?[TestMethod][TestClass] 不是 xUnit 的标注。xUnit 在测试方法上使用 [Fact],而在类上则不使用任何标注。 - canton7
不要嵌套类。 - ErikEJ
1
XUnit没有像[TestClass]这样的东西,任何公共类中有标记为[Fact]的公共void方法都应该被发现并运行。我不确定它是否能处理嵌套类。 - Christopher Hamkins
4个回答

11

我遇到了一个与症状几乎完全相同但问题不同的情况。

我的情况是简单地缺少了nuget包xunit.runner.visualstudio,因为我在解决一些nuget问题时将其删除了。

在Visual Studio的nuget GUI中安装它后,问题立即得到解决。


谢谢!这是我第一次尝试使用现有仓库进行单元测试。但是我正在重构层级结构,新的层级结构中缺少一些包。再次感谢!我之前非常困惑。 - Niels Lucas
解决了我的问题。不知道为什么我必须重新安装运行程序... 昨天一切都正常,重启后 -> 运行程序丢失。非常感谢。 - Shumachine

3
您使用了错误的 xUnit 方法属性,因此 xUnit Runner 无法发现您的测试: 因此,请删除所有 [TestClass] 属性,并将所有 [TestMethod] 属性更改为 [Fact]
我看到你有这个:
using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;

“…所以我猜你正在将现有的MSTest代码移植到xUnit,这种情况下,你可以将MSTest的属性别名为xUnit,而不是改变你代码库中的属性。”
using TestClassAttribute  = SomeDummyAttribute;
using TestMethodAttribute = Xunit.FactAttribute;

internal sealed class SomeDummyAttribute : Attribute {}

如果您使用的是C# 10.0或更高版本,您可以使用global using,该语句将在同一项目中的所有源文件中共享
此外,考虑使用ShouldlyFluent Assertions来替代Assert/Asserts类。

2
在我的情况下,我缺少了NuGet包Microsoft.NET.Test.Sdk。 (你还需要安装NuGet包xunit.runner.visualstudio.

0
这些正是我所需要的。
 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
 <PackageReference Include="Microsoft.TestPlatform" Version="17.7.2" />
 <PackageReference Include="Moq" Version="4.20.69" />
 <PackageReference Include="xunit" Version="2.5.1" />
 <PackageReference Include="xunit.abstractions" Version="2.0.3" />
 <PackageReference Include="xunit.runner.console" Version="2.5.1">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接