초기 커밋.

This commit is contained in:
김형인
2025-06-04 23:10:11 +09:00
parent 52d1b89070
commit 0a489ab39b
5035 changed files with 517142 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4162837cd34c49f479963ff3a17e9365
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,269 @@
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
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8cb892a13f491044698192b8085a7dd3

View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UVC.Tests.Data;
namespace UVC.Tests
{
public static class Tester
{
public static void RunAllTests()
{
Debug.Log("테스트 시작: DataMapperTests");
RunDataMapperTests();
Debug.Log("테스트 완료: DataMapperTests");
}
private static void RunDataMapperTests()
{
DataMapperTests test = new DataMapperTests();
RunTest("Map_StringProperty_MapsCorrectly", () => test.Map_StringProperty_MapsCorrectly());
RunTest("Map_IntProperty_MapsCorrectly", () => test.Map_IntProperty_MapsCorrectly());
RunTest("Map_DoubleProperty_MapsCorrectly", () => test.Map_DoubleProperty_MapsCorrectly());
RunTest("Map_BoolProperty_MapsCorrectly", () => test.Map_BoolProperty_MapsCorrectly());
RunTest("Map_DateTimeProperty_MapsCorrectly", () => test.Map_DateTimeProperty_MapsCorrectly());
RunTest("Map_EnumProperty_MapsCorrectly", () => test.Map_EnumProperty_MapsCorrectly());
RunTest("Map_AdditionalProperty_AddsToResult", () => test.Map_AdditionalProperty_AddsToResult());
RunTest("Map_InvalidDateTimeString_ReturnsNull", () => test.Map_InvalidDateTimeString_ReturnsNull());
RunTest("Map_ComplexObject_MapsAllProperties", () => test.Map_ComplexObject_MapsAllProperties());
}
private static void RunTest(string testName, Action testMethod)
{
try
{
testMethod();
Debug.Log($"테스트 성공: {testName}");
}
catch (Exception ex)
{
Debug.LogError($"테스트 실패: {testName} - {ex.Message}\n{ex.StackTrace}");
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 756669856ddcff54cb51eb7e4f80c1fd