Skip to content

Commit 5213f91

Browse files
authored
Update EchoServerServiceTests.cs
1 parent 6f06a00 commit 5213f91

1 file changed

Lines changed: 25 additions & 27 deletions

File tree

NetSdrClientAppTests/EchoServerServiceTests.cs

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ namespace NetSdrClientAppTests
1212
[TestFixture]
1313
public class EchoServerServiceTests
1414
{
15-
private Mock<ILogger> _mockLogger;
16-
private Mock<ITcpListenerFactory> _mockListenerFactory;
17-
private Mock<ITcpListenerWrapper> _mockListener;
15+
private Mock<ILogger>? _mockLogger;
16+
private Mock<ITcpListenerFactory>? _mockListenerFactory;
17+
private Mock<ITcpListenerWrapper>? _mockListener;
1818

1919
[SetUp]
2020
public void SetUp()
@@ -36,18 +36,19 @@ public async Task HandleClientAsync_ShouldEchoReceivedData()
3636
var mockStream = new Mock<INetworkStreamWrapper>();
3737

3838
byte[] receivedData = new byte[] { 1, 2, 3, 4, 5 };
39-
byte[] echoedData = null;
39+
byte[]? echoedData = null;
4040

41+
// ✅ ВИПРАВЛЕНО: використовуємо Func<> замість лямбди з параметрами
4142
mockStream
4243
.SetupSequence(s => s.ReadAsync(
4344
It.IsAny<byte[]>(),
4445
It.IsAny<int>(),
4546
It.IsAny<int>(),
4647
It.IsAny<CancellationToken>()))
47-
.ReturnsAsync((byte[] buffer, int offset, int count, CancellationToken token) =>
48+
.Returns(Task.FromResult(5))
49+
.Callback<byte[], int, int, CancellationToken>((buffer, offset, count, token) =>
4850
{
4951
Array.Copy(receivedData, 0, buffer, offset, receivedData.Length);
50-
return receivedData.Length;
5152
})
5253
.ReturnsAsync(0);
5354

@@ -66,7 +67,7 @@ public async Task HandleClientAsync_ShouldEchoReceivedData()
6667

6768
mockClient.Setup(c => c.GetStream()).Returns(mockStream.Object);
6869

69-
var server = new EchoServerService(5000, _mockLogger.Object, _mockListenerFactory.Object);
70+
var server = new EchoServerService(5000, _mockLogger!.Object, _mockListenerFactory!.Object);
7071
var cts = new CancellationTokenSource();
7172

7273
// Act
@@ -75,7 +76,7 @@ public async Task HandleClientAsync_ShouldEchoReceivedData()
7576
// Assert
7677
echoedData.Should().NotBeNull();
7778
echoedData.Should().BeEquivalentTo(receivedData);
78-
_mockLogger.Verify(l => l.Log(It.Is<string>(s => s.Contains("Echoed 5 bytes"))), Times.Once);
79+
_mockLogger!.Verify(l => l.Log(It.Is<string>(s => s.Contains("Echoed 5 bytes"))), Times.Once);
7980
_mockLogger.Verify(l => l.Log("Client disconnected."), Times.Once);
8081
}
8182

@@ -96,7 +97,7 @@ public async Task HandleClientAsync_ShouldHandleEmptyStream()
9697

9798
mockClient.Setup(c => c.GetStream()).Returns(mockStream.Object);
9899

99-
var server = new EchoServerService(5000, _mockLogger.Object, _mockListenerFactory.Object);
100+
var server = new EchoServerService(5000, _mockLogger!.Object, _mockListenerFactory!.Object);
100101
var cts = new CancellationTokenSource();
101102

102103
// Act
@@ -110,7 +111,7 @@ public async Task HandleClientAsync_ShouldHandleEmptyStream()
110111
It.IsAny<int>(),
111112
It.IsAny<CancellationToken>()),
112113
Times.Never);
113-
_mockLogger.Verify(l => l.Log("Client disconnected."), Times.Once);
114+
_mockLogger!.Verify(l => l.Log("Client disconnected."), Times.Once);
114115
}
115116

116117
[Test]
@@ -130,14 +131,14 @@ public async Task HandleClientAsync_ShouldHandleException()
130131

131132
mockClient.Setup(c => c.GetStream()).Returns(mockStream.Object);
132133

133-
var server = new EchoServerService(5000, _mockLogger.Object, _mockListenerFactory.Object);
134+
var server = new EchoServerService(5000, _mockLogger!.Object, _mockListenerFactory!.Object);
134135
var cts = new CancellationTokenSource();
135136

136137
// Act
137138
await server.HandleClientAsync(mockClient.Object, cts.Token);
138139

139140
// Assert
140-
_mockLogger.Verify(l => l.LogError(It.Is<string>(s => s.Contains("Network error"))), Times.Once);
141+
_mockLogger!.Verify(l => l.LogError(It.Is<string>(s => s.Contains("Network error"))), Times.Once);
141142
_mockLogger.Verify(l => l.Log("Client disconnected."), Times.Once);
142143
}
143144

@@ -151,21 +152,22 @@ public async Task HandleClientAsync_ShouldEchoMultipleMessages()
151152
byte[] message1 = new byte[] { 1, 2, 3 };
152153
byte[] message2 = new byte[] { 4, 5, 6, 7 };
153154

155+
// ✅ ВИПРАВЛЕНО: правильний синтаксис для SetupSequence
154156
mockStream
155157
.SetupSequence(s => s.ReadAsync(
156158
It.IsAny<byte[]>(),
157159
It.IsAny<int>(),
158160
It.IsAny<int>(),
159161
It.IsAny<CancellationToken>()))
160-
.ReturnsAsync((byte[] buffer, int offset, int count, CancellationToken token) =>
162+
.Returns(Task.FromResult(message1.Length))
163+
.Callback<byte[], int, int, CancellationToken>((buffer, offset, count, token) =>
161164
{
162165
Array.Copy(message1, 0, buffer, offset, message1.Length);
163-
return message1.Length;
164166
})
165-
.ReturnsAsync((byte[] buffer, int offset, int count, CancellationToken token) =>
167+
.Returns(Task.FromResult(message2.Length))
168+
.Callback<byte[], int, int, CancellationToken>((buffer, offset, count, token) =>
166169
{
167170
Array.Copy(message2, 0, buffer, offset, message2.Length);
168-
return message2.Length;
169171
})
170172
.ReturnsAsync(0);
171173

@@ -181,22 +183,22 @@ public async Task HandleClientAsync_ShouldEchoMultipleMessages()
181183

182184
mockClient.Setup(c => c.GetStream()).Returns(mockStream.Object);
183185

184-
var server = new EchoServerService(5000, _mockLogger.Object, _mockListenerFactory.Object);
186+
var server = new EchoServerService(5000, _mockLogger!.Object, _mockListenerFactory!.Object);
185187
var cts = new CancellationTokenSource();
186188

187189
// Act
188190
await server.HandleClientAsync(mockClient.Object, cts.Token);
189191

190192
// Assert
191193
writeCount.Should().Be(2);
192-
_mockLogger.Verify(l => l.Log(It.Is<string>(s => s.Contains("Echoed"))), Times.Exactly(2));
194+
_mockLogger!.Verify(l => l.Log(It.Is<string>(s => s.Contains("Echoed"))), Times.Exactly(2));
193195
}
194196

195197
[Test]
196198
public void Constructor_ShouldThrowException_WhenLoggerIsNull()
197199
{
198200
// Arrange & Act
199-
Action act = () => new EchoServerService(5000, null, _mockListenerFactory.Object);
201+
Action act = () => new EchoServerService(5000, null!, _mockListenerFactory!.Object);
200202

201203
// Assert
202204
act.Should().Throw<ArgumentNullException>()
@@ -207,7 +209,7 @@ public void Constructor_ShouldThrowException_WhenLoggerIsNull()
207209
public void Constructor_ShouldThrowException_WhenListenerFactoryIsNull()
208210
{
209211
// Arrange & Act
210-
Action act = () => new EchoServerService(5000, _mockLogger.Object, null);
212+
Action act = () => new EchoServerService(5000, _mockLogger!.Object, null!);
211213

212214
// Assert
213215
act.Should().Throw<ArgumentNullException>()
@@ -228,22 +230,18 @@ public async Task HandleClientAsync_ShouldStopOnCancellation()
228230
It.IsAny<int>(),
229231
It.IsAny<int>(),
230232
It.IsAny<CancellationToken>()))
231-
.Returns(async (byte[] buffer, int offset, int count, CancellationToken token) =>
232-
{
233-
await Task.Delay(100, token);
234-
return 5;
235-
});
233+
.ReturnsAsync(5);
236234

237235
mockClient.Setup(c => c.GetStream()).Returns(mockStream.Object);
238236

239-
var server = new EchoServerService(5000, _mockLogger.Object, _mockListenerFactory.Object);
237+
var server = new EchoServerService(5000, _mockLogger!.Object, _mockListenerFactory!.Object);
240238

241239
// Act
242240
cts.Cancel();
243241
await server.HandleClientAsync(mockClient.Object, cts.Token);
244242

245243
// Assert
246-
_mockLogger.Verify(l => l.Log("Client disconnected."), Times.Once);
244+
_mockLogger!.Verify(l => l.Log("Client disconnected."), Times.Once);
247245
}
248246
}
249247
}

0 commit comments

Comments
 (0)