초기 커밋.
This commit is contained in:
8
Assets/Scripts/UVC/Tests/Data.meta
Normal file
8
Assets/Scripts/UVC/Tests/Data.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4162837cd34c49f479963ff3a17e9365
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
269
Assets/Scripts/UVC/Tests/Data/DataMapperTests.cs
Normal file
269
Assets/Scripts/UVC/Tests/Data/DataMapperTests.cs
Normal 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
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UVC/Tests/Data/DataMapperTests.cs.meta
Normal file
2
Assets/Scripts/UVC/Tests/Data/DataMapperTests.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8cb892a13f491044698192b8085a7dd3
|
||||
49
Assets/Scripts/UVC/Tests/Tester.cs
Normal file
49
Assets/Scripts/UVC/Tests/Tester.cs
Normal 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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UVC/Tests/Tester.cs.meta
Normal file
2
Assets/Scripts/UVC/Tests/Tester.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 756669856ddcff54cb51eb7e4f80c1fd
|
||||
Reference in New Issue
Block a user