Unit testing ‐ Private Member Tests - Habilya/LearningCourseNotes GitHub Wiki

using FluentAssertions;
using System.Reflection;

namespace Users.Api.Tests.Unit.PrivateMemberTests;

public class SomeClassInTheProject
{
	private int GetPDFMergeOrderDepar(string fileName)
	{
		if (fileName.EndsWith("LTR.rtf", StringComparison.InvariantCultureIgnoreCase))
			return 1;

		if (fileName.EndsWith("F11.rtf", StringComparison.InvariantCultureIgnoreCase))
			return 2;

		if (fileName.EndsWith("STM.rof", StringComparison.InvariantCultureIgnoreCase))
			return 3;

		if (fileName.EndsWith("F08.rtf", StringComparison.InvariantCultureIgnoreCase))
			return 4;

		if (fileName.EndsWith("F54.rtf", StringComparison.InvariantCultureIgnoreCase))
			return 5;

		return -1;
	}
}


public class PrivateMemberTests
{
	[Theory]
	[InlineData("1", "B0084DET.txt", -1)]
	[InlineData("2", "B0084F12.rtf", -1)]
	[InlineData("3", "B0084F50a.LNK", -1)]
	[InlineData("4", "B0084F50b.LNK", -1)]
	[InlineData("5", "B0084F50c.LNK", -1)]
	[InlineData("6", "B0084F50d.LNK", -1)]
	[InlineData("7", "B0084IMA.txt", -1)]
	[InlineData("8", "B0084STM.pdf", -1)]
	[InlineData("9", "B0084F04.rtf", -1)]
	[InlineData("10", "B0084F02.LNK", -1)]
	[InlineData("11", "B0084F51.rtf", -1)]

	[InlineData("12", "B0084LTR.rtf", 1)]
	[InlineData("13", "B0084F11.rtf", 2)]
	[InlineData("14", "B0084STM.rof", 3)]
	[InlineData("15", "B0084F08.rtf", 4)]
	[InlineData("16", "B0084F54.rtf", 5)]
	[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "xUnit1026:Theory methods should use all of their parameters", Justification = "UnitTests with testId")]
	[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "UnitTests with testId")]
	public void GetPDFMergeOrderDepar_ShouldMatch_ExpectedFilenameOrder(string id, string input, int expected)
	{
		// Arrange
		// probably will be instantiated as part of the _sut (system under test)
		var classInstance = new SomeClassInTheProject();

		// Private Method info obtained using REFLEXION
		MethodInfo privateMethodGetPDFMergeOrderDepar = typeof(Users.Api.Tests.Unit.PrivateMemberTests.SomeClassInTheProject)
			.GetMethod("GetPDFMergeOrderDepar", BindingFlags.NonPublic | BindingFlags.Instance);

		object[] methodParameters = new object[1] { input };


		// Act
		var actual = privateMethodGetPDFMergeOrderDepar.Invoke(classInstance, methodParameters);

		// Assert
		actual.Should().Be(expected);
	}
}