Skip to content

Commit 36340ee

Browse files
committed
[增加] 增加Utility 程序集的单元测试
1 parent f955c19 commit 36340ee

10 files changed

Lines changed: 275 additions & 172 deletions

File tree

Tests/GameFrameX.Tests/GameFrameX.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>disable</Nullable>
7+
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
8+
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
79

810
<IsPackable>false</IsPackable>
911
<IsTestProject>true</IsTestProject>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using GameFrameX.Utility;
2+
using Xunit;
3+
4+
namespace GameFrameX.Tests
5+
{
6+
public class LNumberFixTest
7+
{
8+
[Fact]
9+
public void TestCreateNegativeNumbers()
10+
{
11+
// 测试负数的 Create 方法
12+
var negativeNumber = LNumber.Create(-123, -4567);
13+
14+
// 验证结果应该是负数
15+
Assert.True(negativeNumber.Raw < 0, "Raw value should be negative");
16+
Assert.True((double)negativeNumber < 0, "Double value should be negative");
17+
Assert.Equal(-124, negativeNumber.Floor);
18+
Assert.Equal(-123, negativeNumber.Ceiling);
19+
Assert.Equal(-123, (long)negativeNumber);
20+
}
21+
22+
[Fact]
23+
public void TestCreatePositiveNumbers()
24+
{
25+
// 测试正数的 Create 方法
26+
var positiveNumber = LNumber.Create(123, 4567);
27+
28+
// 验证结果应该是正数
29+
Assert.True(positiveNumber.Raw > 0, "Raw value should be positive");
30+
Assert.True((double)positiveNumber > 0, "Double value should be positive");
31+
Assert.Equal(123, positiveNumber.Floor);
32+
Assert.Equal(124, positiveNumber.Ceiling);
33+
Assert.Equal(123, (long)positiveNumber);
34+
}
35+
36+
[Fact]
37+
public void TestCreateMixedSigns()
38+
{
39+
// 测试混合符号的情况
40+
var number1 = LNumber.Create(-123, 4567); // 整数部分负,小数部分正
41+
var number2 = LNumber.Create(123, -4567); // 整数部分正,小数部分负
42+
var number3 = LNumber.Create(0, -4567); // 整数部分为0,小数部分负
43+
44+
// number1 应该是负数(因为整数部分为负)
45+
Assert.True((double)number1 < 0, "number1 should be negative");
46+
47+
// number2 应该是正数(因为整数部分为正)
48+
Assert.True((double)number2 > 0, "number2 should be positive");
49+
50+
// number3 应该是负数(因为整数部分为0且小数部分为负)
51+
Assert.True((double)number3 < 0, "number3 should be negative");
52+
}
53+
}
54+
}

Tests/GameFrameX.Tests/ProtoBuff/ProtoBuffTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void TestSerialize()
2222
{
2323
PbTest pbTest = new PbTest();
2424
pbTest.Test.Add("1");
25-
pbTest.Test.Add(null);
25+
pbTest.Test.Add("2"); // 移除null值,因为ProtoBuf不支持序列化null字符串
2626
pbTest.Test.Add("3");
2727
pbTest.Test.Add("4");
2828
pbTest.Test.Add("5");

Tests/GameFrameX.Tests/Utility/AssemblyHelperTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ public void GetType_WithInvalidTypeName_ShouldReturnNull()
158158
/// 测试 GetType 方法 - null 或空字符串应该抛出异常
159159
/// </summary>
160160
[Theory]
161-
[InlineData(null)]
162161
[InlineData("")]
163162
[InlineData(" ")]
164163
public void GetType_WithInvalidInput_ShouldThrowArgumentException(string typeName)
@@ -167,6 +166,16 @@ public void GetType_WithInvalidInput_ShouldThrowArgumentException(string typeNam
167166
Assert.Throws<ArgumentException>(() => AssemblyHelper.GetType(typeName));
168167
}
169168

169+
/// <summary>
170+
/// 测试 GetType 方法 - null 参数应该抛出 ArgumentNullException
171+
/// </summary>
172+
[Fact]
173+
public void GetType_WithNullInput_ShouldThrowArgumentNullException()
174+
{
175+
// Act & Assert
176+
Assert.Throws<ArgumentNullException>(() => AssemblyHelper.GetType(null));
177+
}
178+
170179
/// <summary>
171180
/// 测试 GetRuntimeImplementTypeNames 泛型方法 - 获取接口实现
172181
/// </summary>

Tests/GameFrameX.Tests/Utility/Extensions/ExpressionVisitorCustomTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,12 @@ public void Visit_WithArrayAccessExpression_ShouldReplaceParametersCorrectly()
246246
var newParam = Expression.Parameter(typeof(TestClass), "y");
247247
var visitor = new ExpressionVisitorCustom(newParam);
248248

249-
// 创建数组访问表达式:x => x.Name[x.Value]
249+
// 创建字符串索引访问表达式:x => x.Name[x.Value]
250250
var nameProperty = Expression.Property(originalParam, nameof(TestClass.Name));
251251
var valueProperty = Expression.Property(originalParam, nameof(TestClass.Value));
252-
var indexAccess = Expression.Property(nameProperty, "Item", valueProperty);
252+
// 使用 MakeIndex 来创建字符串索引访问
253+
var stringIndexer = typeof(string).GetProperty("Chars")!;
254+
var indexAccess = Expression.MakeIndex(nameProperty, stringIndexer, new[] { valueProperty });
253255

254256
var lambda = Expression.Lambda<Func<TestClass, char>>(indexAccess, originalParam);
255257

Tests/GameFrameX.Tests/Utility/Extensions/TimerExtensionTests.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,32 +98,38 @@ public void Reset_WithNullTimer_ShouldThrowArgumentNullException()
9898
public async Task Reset_ShouldResetTimerInterval()
9999
{
100100
// Arrange
101-
var timer = CreateTestTimer(100); // 100ms间隔
101+
var timer = CreateTestTimer(200); // 200ms间隔,增加间隔时间
102102
var elapsedTimes = new List<DateTime>();
103103
var resetSignal = new ManualResetEventSlim(false);
104104

105105
timer.Elapsed += (sender, e) =>
106106
{
107-
elapsedTimes.Add(DateTime.Now);
108-
if (elapsedTimes.Count >= 2)
107+
lock (elapsedTimes)
109108
{
110-
resetSignal.Set();
109+
elapsedTimes.Add(DateTime.Now);
110+
if (elapsedTimes.Count >= 2)
111+
{
112+
resetSignal.Set();
113+
}
111114
}
112115
};
113116

114117
timer.Start();
115118

116119
// 等待一段时间后重置
117-
await Task.Delay(50);
120+
await Task.Delay(100); // 增加等待时间
118121
timer.Reset();
119122

120-
// 等待Timer触发几次
121-
var waitResult = resetSignal.Wait(TimeSpan.FromSeconds(1));
123+
// 等待Timer触发几次,增加超时时间
124+
var waitResult = resetSignal.Wait(TimeSpan.FromSeconds(3));
122125
timer.Stop();
123126

124127
// Assert
125128
Assert.True(waitResult, "Timer should have elapsed at least twice");
126-
Assert.True(elapsedTimes.Count >= 2, "Timer should have elapsed at least twice");
129+
lock (elapsedTimes)
130+
{
131+
Assert.True(elapsedTimes.Count >= 2, $"Timer should have elapsed at least twice, but only elapsed {elapsedTimes.Count} times");
132+
}
127133
}
128134

129135
/// <summary>

0 commit comments

Comments
 (0)