I've created a EntityFramework ASP.NET solution and i'm trying to create a XUnit test project to test my differents classes i've created.
I've created a TestClass for my Activity 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);
}
}
}
}
The problem is that when I launch my testClass, I do have the Test showing up in the test Explorer but VS tells me that the test did not execute and I have no idea why because it's not showing any errors or any messages to explain why it didnt execute
CodePudding user response:
- You're using the wrong method attributes for xUnit, so the xUnit Runner won't discover your tests:
- You're using
[TestClass]
and[TestMethod]
, but xUnit uses[Fact]
(and[Theory]
, and others) only on methods, and doesn't use any attributes on test
class` types. - xUnit's website has a table that matches and compares NUnit's, xUnit's, and MSTest's attributes.
- You're using
- So remove all
[TestClass]
attributes and change all[TestMethod]
attributes to[Fact]
.
I see you have this:
using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
...so I assume you're porting existing MSTest code to xUnit, in which case rather than changing the attributes in your code-base, you could alias MSTest's attributes to xUnit:
using TestClassAttribute = SomeDummyAttribute;
using TestMethodAttribute = Xunit.FactAttribute;
internal sealed class SomeDummyAttribute : Attribute {}
If you're using C# 10.0 or later you can use global using
which will be shared by all source-files in the same project.
Also, consider using Shouldly or Fluent Assertions instead of the Assert
/Asserts
classes.