Files
XRLib/Assets/Scripts/UVC/Tests/Data/DataMapperTests.cs

634 lines
22 KiB
C#
Raw Normal View History

2025-06-04 23:10:11 +09:00
using NUnit.Framework;
using System;
using Newtonsoft.Json.Linq;
using UVC.Data;
using UnityEngine;
namespace UVC.Tests.Data
{
/// <summary>
/// DataMapper 클래스의 테스트를 위한 테스트 클래스입니다.
/// </summary>
[TestFixture]
public class DataMapperTests
{
2025-06-05 00:09:39 +09:00
/// <summary>
/// 모든 테스트 메서드를 실행하는 메서드입니다.
/// </summary>
/// <remarks>
/// 이 메서드는 클래스의 모든 테스트 메서드를 순차적으로 호출하고
/// 각 테스트의 성공 또는 실패 여부를 로그로 출력합니다.
/// </remarks>
public void TestAll()
{
Debug.Log("===== DataMapper 테스트 시작 =====");
RunTest(nameof(Map_StringProperty_MapsCorrectly), Map_StringProperty_MapsCorrectly);
RunTest(nameof(Map_IntProperty_MapsCorrectly), Map_IntProperty_MapsCorrectly);
RunTest(nameof(Map_DoubleProperty_MapsCorrectly), Map_DoubleProperty_MapsCorrectly);
RunTest(nameof(Map_BoolProperty_MapsCorrectly), Map_BoolProperty_MapsCorrectly);
RunTest(nameof(Map_DateTimeProperty_MapsCorrectly), Map_DateTimeProperty_MapsCorrectly);
RunTest(nameof(Map_DataMapProperty_MapsCorrectly), Map_DataMapProperty_MapsCorrectly);
RunTest(nameof(Map_DataMapWithUnmappedValue_ReturnsOriginal), Map_DataMapWithUnmappedValue_ReturnsOriginal);
2025-06-05 00:09:39 +09:00
RunTest(nameof(Map_EnumProperty_MapsCorrectly), Map_EnumProperty_MapsCorrectly);
RunTest(nameof(Map_AdditionalProperty_AddsToResult), Map_AdditionalProperty_AddsToResult);
RunTest(nameof(Map_InvalidDateTimeString_ReturnsNull), Map_InvalidDateTimeString_ReturnsNull);
RunTest(nameof(Map_ComplexObject_MapsAllProperties), Map_ComplexObject_MapsAllProperties);
RunTest(nameof(Map_NestedObject_MapsCorrectly), Map_NestedObject_MapsCorrectly);
RunTest(nameof(Map_ArrayMapping_MapsCorrectly), Map_ArrayMapping_MapsCorrectly);
2025-06-05 20:09:28 +09:00
RunTest(nameof(Map_EmptyMaskArray_CopiesSourceArray), Map_EmptyMaskArray_CopiesSourceArray);
2025-06-05 00:09:39 +09:00
RunTest(nameof(Map_ComplexNestedStructure_MapsCorrectly), Map_ComplexNestedStructure_MapsCorrectly);
RunTest(nameof(Map_MixedArrayTypes_HandlesCorrectly), Map_MixedArrayTypes_HandlesCorrectly);
Debug.Log("===== DataMapper 테스트 완료 =====");
}
/// <summary>
/// 단일 테스트 메서드를 실행하고 결과를 로그로 출력합니다.
/// </summary>
/// <param name="testName">테스트 메서드 이름</param>
/// <param name="testAction">실행할 테스트 메서드</param>
private void RunTest(string testName, Action testAction)
{
try
{
Debug.Log($"테스트 시작: {testName}");
testAction();
Debug.Log($"테스트 성공: {testName}");
}
catch (Exception ex)
{
Debug.LogError($"테스트 실패: {testName}\n{ex.Message}\n{ex.StackTrace}");
}
}
2025-06-04 23:10:11 +09:00
/// <summary>
/// 문자열 타입 매핑 테스트
/// </summary>
[Test]
public void Map_StringProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Name"] = "홍길동";
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Name"": ""김철수"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Name"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual("김철수", result.GetString("Name"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 정수 타입 매핑 테스트
/// </summary>
[Test]
public void Map_IntProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Age"] = 25;
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Age"": 30 }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Age"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual(30, result.GetInt("Age"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 부동소수점 타입 매핑 테스트
/// </summary>
[Test]
public void Map_DoubleProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Height"] = 175.5;
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Height"": 180.5 }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Height"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual(180.5, result.GetDouble("Height"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// Boolean 타입 매핑 테스트
/// </summary>
[Test]
public void Map_BoolProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["IsActive"] = false;
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""IsActive"": true }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("IsActive"));
2025-06-05 20:09:28 +09:00
Assert.IsTrue(result.GetBool("IsActive"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// DateTime 타입 매핑 테스트
/// </summary>
[Test]
public void Map_DateTimeProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["BirthDate"] = JToken.FromObject(DateTime.Now);
2025-06-04 23:10:11 +09:00
var expectedDate = new DateTime(1990, 1, 1);
var source = JObject.Parse(@"{ ""BirthDate"": ""1990-01-01T00:00:00.000"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("BirthDate"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual(expectedDate, result.GetDateTime("BirthDate"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// DataMap 타입 매핑 테스트
2025-06-04 23:10:11 +09:00
/// </summary>
[Test]
public void Map_DataMapProperty_MapsCorrectly()
2025-06-04 23:10:11 +09:00
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
var valueMapper = new DataMap();
2025-06-04 23:10:11 +09:00
valueMapper["ON"] = "활성화";
valueMapper["OFF"] = "비활성화";
2025-06-05 20:09:28 +09:00
mask["Status"] = JToken.FromObject(valueMapper);
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Status"": ""ON"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Status"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual("활성화", result.GetString("Status"));
2025-06-04 23:10:11 +09:00
}
2025-06-05 00:09:39 +09:00
/// <summary>
/// DataMap에 매핑되지 않는 값 처리 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
public void Map_DataMapWithUnmappedValue_ReturnsOriginal()
2025-06-05 00:09:39 +09:00
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
var valueMapper = new DataMap();
2025-06-05 00:09:39 +09:00
valueMapper["ON"] = "활성화";
valueMapper["OFF"] = "비활성화";
2025-06-05 20:09:28 +09:00
mask["Status"] = JToken.FromObject(valueMapper);
2025-06-05 00:09:39 +09:00
var source = JObject.Parse(@"{ ""Status"": ""UNKNOWN"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Status"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual("UNKNOWN", result.GetString("Status"));
2025-06-05 00:09:39 +09:00
}
2025-06-04 23:10:11 +09:00
/// <summary>
/// 열거형 타입 매핑 테스트
/// </summary>
[Test]
public void Map_EnumProperty_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Status"] = JToken.FromObject(UserStatus.Inactive);
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Status"": ""Active"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Status"));
2025-06-05 20:09:28 +09:00
Assert.AreEqual(UserStatus.Active, result.GetEnum<UserStatus>("Status"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 타겟에 없는 추가 속성 매핑 테스트
/// </summary>
[Test]
public void Map_AdditionalProperty_AddsToResult()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Name"] = "홍길동";
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""Name"": ""김철수"", ""Email"": ""kim@example.com"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
2025-06-05 20:09:28 +09:00
Assert.IsFalse(result.ContainsKey("Email"));
Assert.AreEqual(null, result.GetString("Email"));
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 유효하지 않은 DateTime 문자열 매핑 테스트
/// </summary>
[Test]
public void Map_InvalidDateTimeString_ReturnsNull()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["BirthDate"] = JToken.FromObject(DateTime.Now);
2025-06-04 23:10:11 +09:00
var source = JObject.Parse(@"{ ""BirthDate"": ""InvalidDateTime"" }");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("BirthDate"));
2025-06-05 20:09:28 +09:00
Assert.IsNull(result["BirthDate"]);
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 복합 객체 매핑 테스트
/// </summary>
[Test]
public void Map_ComplexObject_MapsAllProperties()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject();
mask["Id"] = 1;
mask["Name"] = "홍길동";
mask["IsActive"] = false;
mask["JoinDate"] = JToken.FromObject(DateTime.Now);
mask["Height"] = 175.5;
mask["Status"] = JToken.FromObject(UserStatus.Inactive);
2025-06-04 23:10:11 +09:00
string json = @"{
""Id"": 100,
""Name"": """",
""IsActive"": true,
""JoinDate"": ""2023-01-01T00:00:00"",
""Height"": 180.0,
""Status"": ""Active"",
""Email"": ""kim@example.com""
}";
var source = JObject.Parse(json);
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-04 23:10:11 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-04 23:10:11 +09:00
// Assert
2025-06-05 20:09:28 +09:00
Assert.AreEqual(6, result.Count);
Assert.AreEqual(100, result.GetInt("Id"));
Assert.AreEqual("김철수", result.GetString("Name"));
Assert.IsTrue(result.GetBool("IsActive"));
Assert.AreEqual(new DateTime(2023, 1, 1), result.GetDateTime("JoinDate"));
Assert.AreEqual(180.0, result.GetDouble("Height"));
Assert.AreEqual(UserStatus.Active, result.GetEnum<UserStatus>("Status"));
Assert.AreEqual(null, result.GetString("Email"));
2025-06-04 23:10:11 +09:00
}
2025-06-05 00:09:39 +09:00
/// <summary>
2025-06-05 20:09:28 +09:00
/// 중첩된 객체 매핑 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
public void Map_NestedObject_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject
2025-06-05 00:09:39 +09:00
{
["User"] = new JObject
{
["Name"] = "홍길동",
["Address"] = new JObject
{
["City"] = "서울",
["ZipCode"] = "12345"
}
}
};
var source = JObject.Parse(@"{
""User"": {
""Name"": """",
""Address"": {
""City"": """",
""ZipCode"": ""67890"",
""Country"": """"
}
}
}");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("User"));
2025-06-05 20:09:28 +09:00
var user = result.GetDataObject("User");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(user);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("김철수", user.GetString("Name"));
2025-06-05 00:09:39 +09:00
2025-06-05 20:09:28 +09:00
var address = user.GetDataObject("Address");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(address);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("부산", address.GetString("City"));
Assert.AreEqual("67890", address.GetString("ZipCode"));
Assert.AreEqual(null, address.GetString("Country"));
2025-06-05 00:09:39 +09:00
}
/// <summary>
2025-06-05 20:09:28 +09:00
/// 배열 매핑 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
public void Map_ArrayMapping_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject
2025-06-05 00:09:39 +09:00
{
["Contacts"] = new JArray
{
new JObject
{
["Type"] = "mobile",
["Number"] = "010-0000-0000"
}
}
};
var source = JObject.Parse(@"{
""Contacts"": [
{ ""Type"": ""mobile"", ""Number"": ""010-1234-5678"" },
{ ""Type"": ""home"", ""Number"": ""02-123-4567"", ""Extension"": ""123"" }
]
}");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Contacts"));
2025-06-05 20:09:28 +09:00
var contacts = result.GetDataArray("Contacts");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(contacts);
Assert.AreEqual(2, contacts.Count);
2025-06-05 00:09:39 +09:00
2025-06-05 20:09:28 +09:00
var contact1 = contacts[0];
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(contact1);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("mobile", contact1.GetString("Type"));
Assert.AreEqual("010-1234-5678", contact1.GetString("Number"));
2025-06-05 00:09:39 +09:00
2025-06-05 20:09:28 +09:00
var contact2 = contacts[1];
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(contact2);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("home", contact2.GetString("Type"));
Assert.AreEqual("02-123-4567", contact2.GetString("Number"));
Assert.AreEqual(null, contact2.GetString("Extension"));
2025-06-05 00:09:39 +09:00
}
/// <summary>
2025-06-05 20:09:28 +09:00
/// 빈 가이드 배열 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
2025-06-05 20:09:28 +09:00
public void Map_EmptyMaskArray_CopiesSourceArray()
2025-06-05 00:09:39 +09:00
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject
2025-06-05 00:09:39 +09:00
{
["Tags"] = new JArray()
};
var source = JObject.Parse(@"{
""Tags"": ["""", """", """"]
}");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
Assert.IsTrue(result.ContainsKey("Tags"));
2025-06-05 20:09:28 +09:00
var tags = result.GetDataArray("Tags");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(tags);
Assert.AreEqual(3, tags.Count);
2025-06-05 20:09:28 +09:00
// DataArray의 항목들을 검증
for (int i = 0; i < tags.Count; i++)
{
var item = tags[i];
Assert.IsNotNull(item);
// DataObject는 "value" 키에 실제 값을 저장
Assert.AreEqual(((JArray)source["Tags"])[i].ToString(), item.GetString("value"));
}
2025-06-05 00:09:39 +09:00
}
/// <summary>
2025-06-05 20:09:28 +09:00
/// 복잡한 중첩 구조 매핑 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
public void Map_ComplexNestedStructure_MapsCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject
2025-06-05 00:09:39 +09:00
{
["Company"] = new JObject
{
["Name"] = "회사명",
["Founded"] = JToken.FromObject(DateTime.Now),
["Departments"] = new JArray
{
new JObject
{
["Name"] = "부서명",
["Employees"] = new JArray
{
new JObject
{
["Name"] = "직원명",
["Age"] = 30,
["Status"] = JToken.FromObject(UserStatus.Active)
}
}
}
}
}
};
var source = JObject.Parse(@"{
""Company"": {
""Name"": ""XYZ "",
""Founded"": ""2000-01-01T00:00:00"",
""Departments"": [
{
""Name"": """",
""Employees"": [
{ ""Name"": """", ""Age"": 35, ""Status"": ""Active"" },
{ ""Name"": """", ""Age"": 28, ""Status"": ""Inactive"" }
]
},
{
""Name"": """",
""Employees"": [
{ ""Name"": """", ""Age"": 32, ""Status"": ""Active"" }
],
""Budget"": 500000
}
],
""Address"": "" ""
}
}");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
2025-06-05 20:09:28 +09:00
var company = result.GetDataObject("Company");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(company);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("XYZ 주식회사", company.GetString("Name"));
Assert.AreEqual(new DateTime(2000, 1, 1), company.GetDateTime("Founded"));
Assert.AreEqual(null, company.GetString("Address"));
2025-06-05 00:09:39 +09:00
2025-06-05 20:09:28 +09:00
var departments = company.GetDataArray("Departments");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(departments);
Assert.AreEqual(2, departments.Count);
2025-06-05 20:09:28 +09:00
var devDept = departments[0];
Assert.AreEqual("개발부", devDept.GetString("Name"));
var devEmployees = devDept.GetDataArray("Employees");
2025-06-05 00:09:39 +09:00
Assert.AreEqual(2, devEmployees.Count);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("김개발", devEmployees[0].GetString("Name"));
Assert.AreEqual(35, devEmployees[0].GetInt("Age"));
Assert.AreEqual(UserStatus.Active, devEmployees[0].GetEnum<UserStatus>("Status"));
Assert.AreEqual("이테스트", devEmployees[1].GetString("Name"));
Assert.AreEqual(UserStatus.Inactive, devEmployees[1].GetEnum<UserStatus>("Status"));
var marketingDept = departments[1];
Assert.AreEqual("마케팅부", marketingDept.GetString("Name"));
Assert.AreEqual(0, marketingDept.GetInt("Budget"));
2025-06-05 20:09:28 +09:00
var marketingEmployees = marketingDept.GetDataArray("Employees");
2025-06-05 00:09:39 +09:00
Assert.AreEqual(1, marketingEmployees.Count);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("박마케팅", marketingEmployees[0].GetString("Name"));
2025-06-05 00:09:39 +09:00
}
/// <summary>
2025-06-05 20:09:28 +09:00
/// 다양한 형식의 배열 테스트
2025-06-05 00:09:39 +09:00
/// </summary>
[Test]
public void Map_MixedArrayTypes_HandlesCorrectly()
{
// Arrange
2025-06-05 20:09:28 +09:00
var mask = new JObject
2025-06-05 00:09:39 +09:00
{
["MixedArray"] = new JArray
{
"문자열",
123,
true,
2025-06-05 20:09:28 +09:00
new JObject { ["Key"] = "Value" },
new JArray{1, 1}
2025-06-05 00:09:39 +09:00
}
};
var source = JObject.Parse(@"{
""MixedArray"": [
"""",
456,
false,
{ ""Key"": ""NewValue"", ""Extra"": ""ExtraValue"" },
2025-06-05 20:09:28 +09:00
[1, 2, 3],
{ ""items"": [1, 2, 3] }
2025-06-05 00:09:39 +09:00
]
}");
2025-06-05 20:09:28 +09:00
var mapper = new DataMapper(mask);
2025-06-05 00:09:39 +09:00
// Act
var result = mapper.Mapping(source);
2025-06-05 00:09:39 +09:00
// Assert
2025-06-05 20:09:28 +09:00
Assert.IsTrue(result.ContainsKey("MixedArray"));
var mixedArray = result.GetDataArray("MixedArray");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(mixedArray);
Assert.AreEqual(5, mixedArray.Count);
2025-06-05 20:09:28 +09:00
// 문자열 항목 검증
Assert.AreEqual("테스트", mixedArray[0].GetString("value"));
// 숫자 항목 검증
Assert.AreEqual(456, mixedArray[1].GetInt("value"));
// 불리언 항목 검증
Assert.AreEqual(false, mixedArray[2].GetBool("value"));
// 객체 항목 검증
var objInArray = mixedArray[3];
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(objInArray);
2025-06-05 20:09:28 +09:00
Assert.AreEqual("NewValue", objInArray.GetString("Key"));
2025-06-05 00:09:39 +09:00
2025-06-05 20:09:28 +09:00
// 중첩 배열 항목 검증
var nestedItem = mixedArray[4];
Assert.IsNotNull(nestedItem);
// DataMapper는 중첩 배열을 "items" 키를 가진 DataObject로 포장합니다
var nestedArray = nestedItem.GetDataArray("items");
2025-06-05 00:09:39 +09:00
Assert.IsNotNull(nestedArray);
2025-06-05 20:09:28 +09:00
Assert.AreEqual(2, nestedArray.Count);
Assert.AreEqual(1, nestedArray[0].GetInt("value"));
Assert.AreEqual(2, nestedArray[1].GetInt("value"));
2025-06-05 00:09:39 +09:00
}
2025-06-04 23:10:11 +09:00
}
/// <summary>
/// 테스트에 사용할 샘플 열거형
/// </summary>
public enum UserStatus
{
Active,
Inactive,
Suspended
}
}