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}");
	}
}