269 lines
7.9 KiB
C#
269 lines
7.9 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 문자열 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_StringProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Name"] = "홍길동";
|
|
|
|
var source = JObject.Parse(@"{ ""Name"": ""김철수"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Name"));
|
|
Assert.AreEqual("김철수", result["Name"].ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 정수 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_IntProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Age"] = 25;
|
|
|
|
var source = JObject.Parse(@"{ ""Age"": 30 }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Age"));
|
|
Assert.AreEqual(30, result["Age"].ToObject<int>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 부동소수점 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_DoubleProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Height"] = 175.5;
|
|
|
|
var source = JObject.Parse(@"{ ""Height"": 180.5 }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Height"));
|
|
Assert.AreEqual(180.5, result["Height"].ToObject<double>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Boolean 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_BoolProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["IsActive"] = false;
|
|
|
|
var source = JObject.Parse(@"{ ""IsActive"": true }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("IsActive"));
|
|
Assert.IsTrue(result["IsActive"].ToObject<bool>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// DateTime 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_DateTimeProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["BirthDate"] = JToken.FromObject(DateTime.Now);
|
|
|
|
var expectedDate = new DateTime(1990, 1, 1);
|
|
var source = JObject.Parse(@"{ ""BirthDate"": ""1990-01-01T00:00:00.000"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("BirthDate"));
|
|
Assert.AreEqual(expectedDate, result["BirthDate"].ToObject<DateTime>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// DataValueMapper 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_DataValueMapperProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
var valueMapper = new DataValueMapper();
|
|
valueMapper["ON"] = "활성화";
|
|
valueMapper["OFF"] = "비활성화";
|
|
guide["Status"] = JToken.FromObject(valueMapper);
|
|
|
|
var source = JObject.Parse(@"{ ""Status"": ""ON"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Status"));
|
|
Assert.AreEqual("활성화", result["Status"].ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 열거형 타입 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_EnumProperty_MapsCorrectly()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Status"] = JToken.FromObject(UserStatus.Inactive);
|
|
|
|
var source = JObject.Parse(@"{ ""Status"": ""Active"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Status"));
|
|
Assert.AreEqual(UserStatus.Active, result["Status"].ToObject<UserStatus>());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 타겟에 없는 추가 속성 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_AdditionalProperty_AddsToResult()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Name"] = "홍길동";
|
|
|
|
var source = JObject.Parse(@"{ ""Name"": ""김철수"", ""Email"": ""kim@example.com"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("Email"));
|
|
Assert.AreEqual("kim@example.com", result["Email"].ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 유효하지 않은 DateTime 문자열 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_InvalidDateTimeString_ReturnsNull()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["BirthDate"] = JToken.FromObject(DateTime.Now);
|
|
|
|
var source = JObject.Parse(@"{ ""BirthDate"": ""InvalidDateTime"" }");
|
|
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.IsTrue(result.ContainsKey("BirthDate"));
|
|
Assert.AreEqual(JTokenType.Null, result["BirthDate"].Type);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 복합 객체 매핑 테스트
|
|
/// </summary>
|
|
[Test]
|
|
public void Map_ComplexObject_MapsAllProperties()
|
|
{
|
|
// Arrange
|
|
var guide = new JObject();
|
|
guide["Id"] = 1;
|
|
guide["Name"] = "홍길동";
|
|
guide["IsActive"] = false;
|
|
guide["JoinDate"] = JToken.FromObject(DateTime.Now);
|
|
guide["Height"] = 175.5;
|
|
guide["Status"] = JToken.FromObject(UserStatus.Inactive);
|
|
|
|
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);
|
|
var mapper = new DataMapper(source, guide);
|
|
|
|
// Act
|
|
var result = mapper.Map();
|
|
|
|
// Assert
|
|
Assert.AreEqual(7, result.Count);
|
|
Assert.AreEqual(100, result["Id"].ToObject<int>());
|
|
Assert.AreEqual("김철수", result["Name"].ToString());
|
|
Assert.IsTrue(result["IsActive"].ToObject<bool>());
|
|
Assert.AreEqual(new DateTime(2023, 1, 1), result["JoinDate"].ToObject<DateTime>());
|
|
Assert.AreEqual(180.0, result["Height"].ToObject<double>());
|
|
Assert.AreEqual(UserStatus.Active, result["Status"].ToObject<UserStatus>());
|
|
Assert.AreEqual("kim@example.com", result["Email"].ToString());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 테스트에 사용할 샘플 열거형
|
|
/// </summary>
|
|
public enum UserStatus
|
|
{
|
|
Active,
|
|
Inactive,
|
|
Suspended
|
|
}
|
|
} |