728x90
Assert.Equal의 경우 두 object가 같은지 확인한다. type, value 모두 같아야만 true를 리턴한다.
하지만 JSON deserialize 하는 객체의 비교, 배열 원소의 순서는 중요하지 않은 비교 등에서 value가 같은지 싶을 때가 있다.
이럴 때는 Assert.Equivalent를 사용하면 Assert.Equal 보다 좀 더 유연한 비교가 가능하다.
아래 예시 소스코드를 보면 더 이해가 쉬울 것이다.
using System.Text.Json;
namespace MyProject.Tests;
public class EquivalentTests
{
[Fact]
public void Test1()
{
int[] array1 = [1, 2, 3];
int[] array2 = [2, 3, 1];
Assert.Equal(array1, array2); // false
Assert.Equivalent(array1, array2); //true
}
[Fact]
public void Test2()
{
var test1 = new Test("1", "2", "3");
var test2 = new Test("1", "2", "3");
Assert.Equal(test1, test2); // false
Assert.Equivalent(test1, test2); //true
}
public class Test(string? a, string? b, string? c)
{
public string? A { get; } = a;
public string? B { get; } = b;
public string? C { get; } = c;
}
[Fact]
public void Test3()
{
var json1 = """
{
"Name": "John",
"Age": 30,
"Address": {
"Street": "123 Main St",
"City": "Anytown"
}
}
""";
var json2 = """
{
"Age": 30,
"Name": "John",
"Address": {
"City": "Anytown",
"Street": "123 Main St"
}
}
""";
Assert.Equal(JsonDocument.Parse(json1), JsonDocument.Parse(json2)); // false
Assert.Equivalent(JsonDocument.Parse(json1), JsonDocument.Parse(json2)); // true
}
}
728x90
'Programming > .NET' 카테고리의 다른 글
[.NET] .NET 인증서 net::ERR_CERT_AUTHORITY_INVALID 에러 해결 방법 (0) | 2024.07.29 |
---|---|
[.NET] Rx.NET Error Handling (0) | 2024.02.23 |
[.NET] Unit testing best practice (0) | 2024.01.11 |
[Azure] GitHub actions 배포 시 ValidateAzureResource Exception (0) | 2024.01.05 |
[Azure Functions] Timer Trigger Time Zone 설정하기 (0) | 2024.01.04 |
댓글