리크 테스트 gui
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.5 KiB

1 week ago
using System;
using System.Threading.Tasks;
using leak_test_project.Infrastructure;
using leak_test_project.Services;
using Moq;
using Xunit;
namespace leak_test_project.Tests.Services
{
public class Board4253ServiceTests
{
[Fact]
public async Task CheckStatusAsync_Success_ReturnsTrue()
{
// Arrange
var mockComm = new Mock<ICommunication>();
mockComm.Setup(c => c.IsOpen).Returns(true);
var service = new Board4253Service(mockComm.Object);
int channel = 1;
string expectedCommand = "x00c_001101:owt28006727ea97c7801\r\n";
// Simulate receiving Success message
mockComm.Setup(c => c.Write(It.Is<string>(s => s == expectedCommand)))
.Callback<string>(cmd => {
Task.Run(() => {
mockComm.Raise(c => c.DataReceived += null, mockComm.Object, "Response: Success <end>");
});
});
// Act
bool result = await service.CheckStatusAsync(channel);
// Assert
Assert.True(result);
mockComm.Verify(c => c.Write(expectedCommand), Times.AtLeastOnce);
}
[Fact]
public async Task CheckStatusAsync_Fail_ReturnsFalse()
{
// Arrange
var mockComm = new Mock<ICommunication>();
mockComm.Setup(c => c.IsOpen).Returns(true);
var service = new Board4253Service(mockComm.Object);
// Simulate receiving Fail message
mockComm.Setup(c => c.Write(It.IsAny<string>()))
.Callback<string>(cmd => {
Task.Run(() => {
mockComm.Raise(c => c.DataReceived += null, mockComm.Object, "Response: Fail <end>");
});
});
// Act
bool result = await service.CheckStatusAsync(); // 기본값 채널 1 테스트
// Assert
Assert.False(result);
}
[Fact]
public async Task ReadIdAsync_ValidId_ReturnsId()
{
// Arrange
var mockComm = new Mock<ICommunication>();
mockComm.Setup(c => c.IsOpen).Returns(true);
var service = new Board4253Service(mockComm.Object);
string expectedId = "ABC1234567890XYZ";
int channel = 2;
string expectedCommand = "x00c_002101:ow2800326003e\r\n";
// Simulate receiving ID
mockComm.Setup(c => c.Write(It.Is<string>(s => s == expectedCommand)))
.Callback<string>(cmd => {
Task.Run(() => {
mockComm.Raise(c => c.DataReceived += null, mockComm.Object, $"ID: {expectedId} <end>");
});
});
// Act
string resultId = await service.ReadIdAsync(channel);
// Assert
Assert.Equal(expectedId, resultId);
mockComm.Verify(c => c.Write(expectedCommand), Times.AtLeastOnce);
}
[Fact]
public async Task ReadIdAsync_Timeout_ReturnsNull()
{
// Arrange
var mockComm = new Mock<ICommunication>();
mockComm.Setup(c => c.IsOpen).Returns(true);
var service = new Board4253Service(mockComm.Object);
service.TimeoutMs = 100; // 타임아웃 테스트 속도를 위해 100ms로 설정
// Act
string resultId = await service.ReadIdAsync();
// Assert
Assert.Null(resultId);
}
}
}