给数据中心添加菜单操作功能
This commit is contained in:
@@ -1,173 +0,0 @@
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Application.DTOs.Events;
|
||||
using DMS.Application.Interfaces;
|
||||
using DMS.Application.Services;
|
||||
using DMS.Core.Interfaces;
|
||||
using Moq;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using Xunit;
|
||||
|
||||
namespace DMS.Infrastructure.UnitTests
|
||||
{
|
||||
public class DataCenterServiceTests
|
||||
{
|
||||
[Fact]
|
||||
public void DataCenterService_Should_Implement_All_Required_Methods()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
|
||||
// Act
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
null, // 在测试中不会使用到mapper
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
// Assert - Verify that service implements the interface
|
||||
Assert.IsAssignableFrom<IDataCenterService>(dataCenterService);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DataCenterService_Should_Have_ConcurrentDictionary_Properties()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
|
||||
// Act
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
null, // 在测试中不会使用到mapper
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(dataCenterService.Devices);
|
||||
Assert.NotNull(dataCenterService.VariableTables);
|
||||
Assert.NotNull(dataCenterService.Variables);
|
||||
Assert.IsType<ConcurrentDictionary<int, DeviceDto>>(dataCenterService.Devices);
|
||||
Assert.IsType<ConcurrentDictionary<int, VariableTableDto>>(dataCenterService.VariableTables);
|
||||
Assert.IsType<ConcurrentDictionary<int, VariableDto>>(dataCenterService.Variables);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DataCenterService_AddDeviceToMemory_Should_Add_Device_To_Dictionary()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockMapper = new Mock<IMapper>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
mockMapper.Object,
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
var deviceDto = new DeviceDto { Id = 1, Name = "Test Device" };
|
||||
|
||||
// Act
|
||||
dataCenterService.AddDeviceToMemory(deviceDto);
|
||||
|
||||
// Assert
|
||||
Assert.True(dataCenterService.Devices.ContainsKey(1));
|
||||
Assert.Equal(deviceDto, dataCenterService.Devices[1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DataCenterService_UpdateDeviceInMemory_Should_Update_Device_In_Dictionary()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockMapper = new Mock<IMapper>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
mockMapper.Object,
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
var deviceDto = new DeviceDto { Id = 1, Name = "Test Device" };
|
||||
var updatedDeviceDto = new DeviceDto { Id = 1, Name = "Updated Device" };
|
||||
|
||||
// Act
|
||||
dataCenterService.AddDeviceToMemory(deviceDto);
|
||||
dataCenterService.UpdateDeviceInMemory(updatedDeviceDto);
|
||||
|
||||
// Assert
|
||||
Assert.True(dataCenterService.Devices.ContainsKey(1));
|
||||
Assert.Equal(updatedDeviceDto, dataCenterService.Devices[1]);
|
||||
Assert.Equal("Updated Device", dataCenterService.Devices[1].Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DataCenterService_RemoveDeviceFromMemory_Should_Remove_Device_From_Dictionary()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockMapper = new Mock<IMapper>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
mockMapper.Object,
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
var deviceDto = new DeviceDto { Id = 1, Name = "Test Device" };
|
||||
|
||||
// Act
|
||||
dataCenterService.AddDeviceToMemory(deviceDto);
|
||||
dataCenterService.RemoveDeviceFromMemory(1);
|
||||
|
||||
// Assert
|
||||
Assert.False(dataCenterService.Devices.ContainsKey(1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DataCenterService_Should_Raise_DeviceChanged_Event_On_Add()
|
||||
{
|
||||
// Arrange
|
||||
var mockRepositoryManager = new Mock<IRepositoryManager>();
|
||||
var mockMapper = new Mock<IMapper>();
|
||||
var mockDeviceAppService = new Mock<IDeviceAppService>();
|
||||
var mockVariableTableAppService = new Mock<IVariableTableAppService>();
|
||||
var mockVariableAppService = new Mock<IVariableAppService>();
|
||||
var dataCenterService = new DataCenterService(
|
||||
mockRepositoryManager.Object,
|
||||
mockMapper.Object,
|
||||
mockDeviceAppService.Object,
|
||||
mockVariableTableAppService.Object,
|
||||
mockVariableAppService.Object);
|
||||
|
||||
DeviceChangedEventArgs eventArgs = null;
|
||||
dataCenterService.DeviceChanged += (sender, args) => eventArgs = args;
|
||||
|
||||
var deviceDto = new DeviceDto { Id = 1, Name = "Test Device" };
|
||||
|
||||
// Act
|
||||
dataCenterService.AddDeviceToMemory(deviceDto);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(eventArgs);
|
||||
Assert.Equal(DataChangeType.Added, eventArgs.ChangeType);
|
||||
Assert.Equal(deviceDto, eventArgs.Device);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
using DMS.Infrastructure.Interfaces.Services;
|
||||
using DMS.Infrastructure.Services;
|
||||
using Opc.Ua;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace DMS.Infrastructure.UnitTests.Services
|
||||
{
|
||||
public class OpcUaServiceTest
|
||||
{
|
||||
[Fact]
|
||||
public async Task TestOpcUaService_CreateSession_WithValidUrl_ShouldCreateSession()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var opcUaServerUrl = "opc.tcp://localhost:4840"; // 示例URL,实际测试时需要真实的OPC UA服务器
|
||||
|
||||
// Act & Assert
|
||||
// 注意:这个测试需要真实的OPC UA服务器才能通过
|
||||
// 在实际测试环境中,您需要启动一个OPC UA服务器
|
||||
try
|
||||
{
|
||||
await service.CreateSession(opcUaServerUrl);
|
||||
// 如果没有异常,则认为会话创建成功
|
||||
Assert.True(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 在没有真实服务器的情况下,我们期望出现连接异常
|
||||
Assert.NotNull(ex);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TestOpcUaService_CreateSession_WithNullUrl_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
string opcUaServerUrl = null;
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<ArgumentException>(async () =>
|
||||
{
|
||||
await service.CreateSession(opcUaServerUrl);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TestOpcUaService_CreateSession_WithEmptyUrl_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var opcUaServerUrl = "";
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<ArgumentException>(async () =>
|
||||
{
|
||||
await service.CreateSession(opcUaServerUrl);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_IsConnected_WithoutSession_ShouldReturnFalse()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
|
||||
// Act
|
||||
var isConnected = service.IsConnected();
|
||||
|
||||
// Assert
|
||||
Assert.False(isConnected);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task TestOpcUaService_ConnectAsync_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(async () =>
|
||||
{
|
||||
await service.ConnectAsync("opc.tcp://localhost:4840");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_Connect_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
{
|
||||
service.Connect();
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_AddSubscription_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var subscriptionName = "TestSubscription";
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
{
|
||||
service.AddSubscription(subscriptionName);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_BrowseNodes_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var nodeId = NodeId.Null;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
{
|
||||
service.BrowseNodes(nodeId);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_ReadValue_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var nodeId = NodeId.Null;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
{
|
||||
service.ReadValue(nodeId);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestOpcUaService_WriteValue_WithoutSession_ShouldThrowException()
|
||||
{
|
||||
// Arrange
|
||||
var service = new OpcUaService();
|
||||
var nodeId = NodeId.Null;
|
||||
var value = "test";
|
||||
|
||||
// Act & Assert
|
||||
Assert.Throws<InvalidOperationException>(() =>
|
||||
{
|
||||
service.WriteValue(nodeId, value);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user