Visual Studio 2022 不是 运行 XUnit 测试
Visual Studio 2022 not running XUnit tests
我已经创建了一个 EntityFramework ASP.NET 解决方案,我正在尝试创建一个 XUnit 测试项目来测试我创建的差异 类。
我已经为我的 Activity Class 创建了一个测试Class :
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);
}
}
}
}
问题是,当我启动我的测试时Class,我确实在测试资源管理器中显示了测试,但 VS 告诉我测试没有执行,我不知道为什么,因为它不是显示任何错误或任何消息来解释为什么它没有执行
测试输出:
- 您为 xUnit 使用了错误的方法属性,因此 xUnit Runner 不会发现您的测试:
- 您正在使用
[TestClass]
和 [TestMethod]
,但 xUnit 使用 [Fact]
(和 [Theory]
,以及其他 ) only on methods, and doesn't use any attributes on test
class`类型。
- xUnit's website has a table that matches and compares NUnit's, xUnit's, and MSTest's attributes.
- 因此删除所有
[TestClass]
属性并将所有 [TestMethod]
属性更改为 [Fact]
。
我看到你有这个:
using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
...所以我假设您正在将现有的 MSTest 代码移植到 xUnit,在这种情况下,您可以将 MSTest 的属性别名为 xUnit:
而不是更改 code-base 中的属性
using TestClassAttribute = SomeDummyAttribute;
using TestMethodAttribute = Xunit.FactAttribute;
internal sealed class SomeDummyAttribute : Attribute {}
如果您使用的是 C# 10.0 或更高版本you can use global using
which will be shared by all source-files in the same project。
另外,考虑使用 Shouldly or Fluent Assertions 而不是 Assert
/Asserts
classes.
我已经创建了一个 EntityFramework ASP.NET 解决方案,我正在尝试创建一个 XUnit 测试项目来测试我创建的差异 类。
我已经为我的 Activity Class 创建了一个测试Class :
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);
}
}
}
}
问题是,当我启动我的测试时Class,我确实在测试资源管理器中显示了测试,但 VS 告诉我测试没有执行,我不知道为什么,因为它不是显示任何错误或任何消息来解释为什么它没有执行
测试输出:
- 您为 xUnit 使用了错误的方法属性,因此 xUnit Runner 不会发现您的测试:
- 您正在使用
[TestClass]
和[TestMethod]
,但 xUnit 使用[Fact]
(和[Theory]
,以及其他) only on methods, and doesn't use any attributes on test
class`类型。 - xUnit's website has a table that matches and compares NUnit's, xUnit's, and MSTest's attributes.
- 您正在使用
- 因此删除所有
[TestClass]
属性并将所有[TestMethod]
属性更改为[Fact]
。
我看到你有这个:
using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
...所以我假设您正在将现有的 MSTest 代码移植到 xUnit,在这种情况下,您可以将 MSTest 的属性别名为 xUnit:
而不是更改 code-base 中的属性using TestClassAttribute = SomeDummyAttribute;
using TestMethodAttribute = Xunit.FactAttribute;
internal sealed class SomeDummyAttribute : Attribute {}
如果您使用的是 C# 10.0 或更高版本you can use global using
which will be shared by all source-files in the same project。
另外,考虑使用 Shouldly or Fluent Assertions 而不是 Assert
/Asserts
classes.