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.
104 lines
3.5 KiB
104 lines
3.5 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
|