@@ -17,25 +17,56 @@ public class AsyncAuditDataStorageTest
1717 /// </summary>
1818 public class TestAsyncAuditDataStorage : AsyncAuditDataStorage < string >
1919 {
20+ #region Public 构造函数
21+
2022 public TestAsyncAuditDataStorage ( ILogger < AsyncAuditDataStorage < string > > logger ) : base ( logger )
2123 {
2224 }
2325
24- protected override ValueTask < string > CreateDataAsync ( ActionAuditingExecutingContext context , CancellationToken cancellationToken )
25- {
26- return ValueTask . FromResult ( "testData" ) ;
27- }
26+ #endregion Public 构造函数
27+
28+ #region Protected Internal 方法
2829
2930 protected internal override Task SaveDataAsync ( string data , CancellationToken cancellationToken )
3031 {
3132 return Task . CompletedTask ;
3233 }
34+
35+ #endregion Protected Internal 方法
36+
37+ #region Protected 方法
38+
39+ protected override ValueTask < string > CreateDataAsync ( ActionAuditingExecutingContext context , CancellationToken cancellationToken )
40+ {
41+ return ValueTask . FromResult ( "testData" ) ;
42+ }
43+
44+ #endregion Protected 方法
3345 }
3446
35- #endregion
47+ #endregion 测试辅助类
3648
3749 #region 测试方法
3850
51+ /// <summary>
52+ /// 测试AddAsync方法是否正确写入数据到通道
53+ /// </summary>
54+ [ TestMethod ]
55+ public async Task AddAsync_ShouldWriteToChannel ( )
56+ {
57+ // Arrange
58+ var mockLogger = new Mock < ILogger < AsyncAuditDataStorage < string > > > ( ) ;
59+ var storage = new TestAsyncAuditDataStorage ( mockLogger . Object ) ;
60+ var mockContext = new Mock < ActionAuditingExecutingContext > ( null , null , null , null ) ;
61+
62+ // Act
63+ await storage . AddAsync ( mockContext . Object , CancellationToken . None ) ;
64+
65+ // Assert
66+ var result = await storage . DataChannel . Reader . ReadAsync ( ) ;
67+ Assert . AreEqual ( "testData" , result ) ;
68+ }
69+
3970 /// <summary>
4071 /// 测试构造函数是否正确初始化
4172 /// </summary>
@@ -54,36 +85,35 @@ public void Constructor_ShouldInitializeCorrectly()
5485 }
5586
5687 /// <summary>
57- /// 测试AddAsync方法是否正确写入数据到通道
88+ /// 测试Dispose方法是否取消运行令牌
5889 /// </summary>
5990 [ TestMethod ]
60- public async Task AddAsync_ShouldWriteToChannel ( )
91+ public void Dispose_ShouldCancelRunningToken ( )
6192 {
6293 // Arrange
6394 var mockLogger = new Mock < ILogger < AsyncAuditDataStorage < string > > > ( ) ;
6495 var storage = new TestAsyncAuditDataStorage ( mockLogger . Object ) ;
65- var mockContext = new Mock < ActionAuditingExecutingContext > ( null , null , null , null ) ;
6696
6797 // Act
68- await storage . AddAsync ( mockContext . Object , CancellationToken . None ) ;
98+ storage . Dispose ( ) ;
6999
70100 // Assert
71- var result = await storage . DataChannel . Reader . ReadAsync ( ) ;
72- Assert . AreEqual ( "testData" , result ) ;
101+ Assert . IsTrue ( storage . RunningCancellationToken . IsCancellationRequested ) ;
73102 }
74103
75104 /// <summary>
76- /// 测试Dispose方法是否取消运行令牌
105+ /// 测试Dispose方法是否处理多次调用
77106 /// </summary>
78107 [ TestMethod ]
79- public void Dispose_ShouldCancelRunningToken ( )
108+ public void Dispose_ShouldHandleMultipleCalls ( )
80109 {
81110 // Arrange
82111 var mockLogger = new Mock < ILogger < AsyncAuditDataStorage < string > > > ( ) ;
83112 var storage = new TestAsyncAuditDataStorage ( mockLogger . Object ) ;
84113
85114 // Act
86115 storage . Dispose ( ) ;
116+ storage . Dispose ( ) ; // 第二次调用
87117
88118 // Assert
89119 Assert . IsTrue ( storage . RunningCancellationToken . IsCancellationRequested ) ;
@@ -97,6 +127,9 @@ public async Task RunSaveLoopAsync_ShouldLogError_WhenSaveFails()
97127 {
98128 // Arrange
99129 var mockLogger = new Mock < ILogger < AsyncAuditDataStorage < string > > > ( ) ;
130+ mockLogger . Setup ( x => x . IsEnabled ( LogLevel . Warning ) )
131+ . Returns ( true ) ;
132+
100133 var storage = new Mock < TestAsyncAuditDataStorage > ( mockLogger . Object ) { CallBase = true } ;
101134 storage . Setup ( x => x . SaveDataAsync ( It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
102135 . ThrowsAsync ( new Exception ( "Test exception" ) ) ;
@@ -141,23 +174,5 @@ public async Task RunSaveLoopAsync_ShouldLogWarning_WhenCancelled()
141174 Times . AtLeastOnce ) ;
142175 }
143176
144- /// <summary>
145- /// 测试Dispose方法是否处理多次调用
146- /// </summary>
147- [ TestMethod ]
148- public void Dispose_ShouldHandleMultipleCalls ( )
149- {
150- // Arrange
151- var mockLogger = new Mock < ILogger < AsyncAuditDataStorage < string > > > ( ) ;
152- var storage = new TestAsyncAuditDataStorage ( mockLogger . Object ) ;
153-
154- // Act
155- storage . Dispose ( ) ;
156- storage . Dispose ( ) ; // 第二次调用
157-
158- // Assert
159- Assert . IsTrue ( storage . RunningCancellationToken . IsCancellationRequested ) ;
160- }
161-
162- #endregion
177+ #endregion 测试方法
163178}
0 commit comments