完成更新设备的测试

This commit is contained in:
2025-07-24 18:52:29 +08:00
parent 7b9c91eee1
commit 899e657053
5 changed files with 42 additions and 12 deletions

View File

@@ -8,12 +8,12 @@ namespace DMS.Application.DTOs;
public class UpdateDeviceDto
{
public int Id { get; set; }
public string Name { get; set; }
public ProtocolType Protocol { get; set; }
public string IpAddress { get; set; }
public int Port { get; set; }
public int Rack { get; set; }
public int Slot { get; set; }
public string OpcUaServerUrl { get; set; }
public bool IsActive { get; set; }
public string? Name { get; set; }
public ProtocolType? Protocol { get; set; }
public string? IpAddress { get; set; }
public int? Port { get; set; }
public int? Rack { get; set; }
public int? Slot { get; set; }
public string? OpcUaServerUrl { get; set; }
public bool? IsActive { get; set; }
}

View File

@@ -29,7 +29,7 @@ public interface IDeviceAppService
/// <summary>
/// 异步更新一个已存在的设备。
/// </summary>
Task UpdateDeviceAsync(UpdateDeviceDto deviceDto);
Task<int> UpdateDeviceAsync(UpdateDeviceDto deviceDto);
/// <summary>
/// 异步删除一个设备。

View File

@@ -17,10 +17,22 @@ public class MappingProfile : Profile
.ForMember(dest => dest.VariableTables, opt => opt.Ignore());
CreateMap<UpdateDeviceDto, Device>()
// 1. 首先忽略那些永远不应从DTO更新的属性
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.Description, opt => opt.Ignore())
.ForMember(dest => dest.VariableTables, opt => opt.Ignore())
.ForMember(dest => dest.CpuType, opt => opt.Ignore())
.ForMember(dest => dest.DeviceType, opt => opt.Ignore());
.ForMember(dest => dest.DeviceType, opt => opt.Ignore())
// 2. 然后,为每个可空属性单独设置条件
.ForMember(dest => dest.Name, opt => opt.Condition(src => src.Name != null))
.ForMember(dest => dest.Protocol, opt => opt.Condition(src => src.Protocol.HasValue))
.ForMember(dest => dest.IpAddress, opt => opt.Condition(src => src.IpAddress != null))
.ForMember(dest => dest.Port, opt => opt.Condition(src => src.Port.HasValue))
.ForMember(dest => dest.Rack, opt => opt.Condition(src => src.Rack.HasValue))
.ForMember(dest => dest.Slot, opt => opt.Condition(src => src.Slot.HasValue))
.ForMember(dest => dest.OpcUaServerUrl, opt => opt.Condition(src => src.OpcUaServerUrl != null))
.ForMember(dest => dest.IsActive, opt => opt.Condition(src => src.IsActive.HasValue));
CreateMap<Device, DeviceDto>()
.ForMember(dest => dest.Protocol, opt => opt.MapFrom(src => src.Protocol.ToString()))

View File

@@ -119,8 +119,9 @@ public class DeviceService : IDeviceAppService
/// <summary>
/// 异步更新一个已存在的设备。
/// </summary>
public async Task UpdateDeviceAsync(UpdateDeviceDto deviceDto)
public async Task<int> UpdateDeviceAsync(UpdateDeviceDto deviceDto)
{
await _repoManager.BeginTranAsync();
var device = await _repoManager.Devices.GetByIdAsync(deviceDto.Id);
if (device == null)
{
@@ -128,8 +129,9 @@ public class DeviceService : IDeviceAppService
}
_mapper.Map(deviceDto, device);
await _repoManager.Devices.UpdateAsync(device);
int res=await _repoManager.Devices.UpdateAsync(device);
await _repoManager.CommitAsync();
return res;
}
/// <summary>

View File

@@ -48,4 +48,20 @@ public class DeviceServiceTest : BaseServiceTest // 继承基类
// Assert
Assert.Equal(isSuccess,true);
}
[Fact]
public async Task UpdateDeviceAsyncTest()
{
UpdateDeviceDto dto = new UpdateDeviceDto()
{
Id = 5,
Name = "lalala",
IsActive = true,
Rack = 0,
Slot = 0
};
var res = await _deviceService.UpdateDeviceAsync(dto);
Assert.NotEqual(res,0);
}
}