Unit testing ‐ Fixtures - Habilya/LearningCourseNotes GitHub Wiki
Default behavior:
using Xunit.Abstractions;
namespace Users.Api.Tests.Unit.DefaultBehaviorTests;
public class DefaultBehaviorTests
{
private readonly Guid _id = Guid.NewGuid();
private readonly ITestOutputHelper _testOutputHelper;
public DefaultBehaviorTests(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
// The Guid is different because we will have a new instance of
// DefaultBehaviorTests class PER TEST (ExampleTest1, ExampleTest2)
[Fact]
public void ExampleTest1()
{
_testOutputHelper.WriteLine($"The Guid was: {_id}");
}
[Fact]
public void ExampleTest2()
{
_testOutputHelper.WriteLine($"The Guid was: {_id}");
}
}
Note the difference usninf a fixture
namespace Users.Api.Tests.Unit.ClassFixture;
public class GuidTestsFixture : IDisposable
{
public Guid Id { get; } = Guid.NewGuid();
public GuidTestsFixture()
{
// The constructor is also shared between tests
// Ususally setup code goes here
}
public void Dispose()
{
}
}
using Xunit.Abstractions;
namespace Users.Api.Tests.Unit.ClassFixture;
public class ClassFixtureBehaviorTests : IClassFixture<GuidTestsFixture>
{
private readonly ITestOutputHelper _testOutputHelper;
private readonly GuidTestsFixture _fixture;
public ClassFixtureBehaviorTests(ITestOutputHelper testOutputHelper, GuidTestsFixture fixture)
{
// Constructor is called once per test
// (but fixture constructor and dispose is called only once per ENTIRE run)
_testOutputHelper = testOutputHelper;
_fixture = fixture;
}
// Note The Guid is SAME in both tests
[Fact]
public void ExampleTest1()
{
_testOutputHelper.WriteLine($"The Guid was: {_fixture.Id}");
}
[Fact]
public void ExampleTest2()
{
_testOutputHelper.WriteLine($"The Guid was: {_fixture.Id}");
}
}