【代码评审】IOT:设备的 review

This commit is contained in:
YunaiV
2024-09-21 10:09:30 +08:00
parent bd18e73052
commit 6b9cca0b79
14 changed files with 145 additions and 440 deletions

View File

@@ -1,219 +0,0 @@
package cn.iocoder.yudao.module.iot.service.device;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.IotDeviceMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* {@link DeviceServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(DeviceServiceImpl.class)
public class DeviceServiceImplTest extends BaseDbUnitTest {
@Resource
private DeviceServiceImpl deviceService;
@Resource
private IotDeviceMapper deviceMapper;
@Test
public void testCreateDevice_success() {
// 准备参数
IotDeviceSaveReqVO createReqVO = randomPojo(IotDeviceSaveReqVO.class).setId(null);
// 调用
Long deviceId = deviceService.createDevice(createReqVO);
// 断言
assertNotNull(deviceId);
// 校验记录的属性是否正确
IotDeviceDO device = deviceMapper.selectById(deviceId);
assertPojoEquals(createReqVO, device, "id");
}
@Test
public void testUpdateDevice_success() {
// mock 数据
IotDeviceDO dbDevice = randomPojo(IotDeviceDO.class);
deviceMapper.insert(dbDevice);// @Sql: 先插入出一条存在的数据
// 准备参数
IotDeviceSaveReqVO updateReqVO = randomPojo(IotDeviceSaveReqVO.class, o -> {
o.setId(dbDevice.getId()); // 设置更新的 ID
});
// 调用
deviceService.updateDevice(updateReqVO);
// 校验是否更新正确
IotDeviceDO device = deviceMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, device);
}
@Test
public void testUpdateDevice_notExists() {
// 准备参数
IotDeviceSaveReqVO updateReqVO = randomPojo(IotDeviceSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> deviceService.updateDevice(updateReqVO), DEVICE_NOT_EXISTS);
}
@Test
public void testDeleteDevice_success() {
// mock 数据
IotDeviceDO dbDevice = randomPojo(IotDeviceDO.class);
deviceMapper.insert(dbDevice);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbDevice.getId();
// 调用
deviceService.deleteDevice(id);
// 校验数据不存在了
assertNull(deviceMapper.selectById(id));
}
@Test
public void testDeleteDevice_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> deviceService.deleteDevice(id), DEVICE_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetDevicePage() {
// mock 数据
IotDeviceDO dbDevice = randomPojo(IotDeviceDO.class, o -> { // 等会查询到
o.setDeviceKey(null);
o.setDeviceName(null);
o.setProductId(null);
o.setProductKey(null);
o.setDeviceType(null);
o.setNickname(null);
o.setGatewayId(null);
o.setStatus(null);
o.setStatusLastUpdateTime(null);
o.setLastOnlineTime(null);
o.setLastOfflineTime(null);
o.setActiveTime(null);
o.setIp(null);
o.setFirmwareVersion(null);
o.setDeviceSecret(null);
o.setMqttClientId(null);
o.setMqttUsername(null);
o.setMqttPassword(null);
o.setAuthType(null);
o.setLatitude(null);
o.setLongitude(null);
o.setAreaId(null);
o.setAddress(null);
o.setSerialNumber(null);
o.setCreateTime(null);
});
deviceMapper.insert(dbDevice);
// 测试 deviceKey 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setDeviceKey(null)));
// 测试 deviceName 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setDeviceName(null)));
// 测试 productId 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setProductId(null)));
// 测试 productKey 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setProductKey(null)));
// 测试 deviceType 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setDeviceType(null)));
// 测试 nickname 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setNickname(null)));
// 测试 gatewayId 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setGatewayId(null)));
// 测试 status 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setStatus(null)));
// 测试 statusLastUpdateTime 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setStatusLastUpdateTime(null)));
// 测试 lastOnlineTime 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setLastOnlineTime(null)));
// 测试 lastOfflineTime 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setLastOfflineTime(null)));
// 测试 activeTime 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setActiveTime(null)));
// 测试 ip 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setIp(null)));
// 测试 firmwareVersion 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setFirmwareVersion(null)));
// 测试 deviceSecret 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setDeviceSecret(null)));
// 测试 mqttClientId 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setMqttClientId(null)));
// 测试 mqttUsername 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setMqttUsername(null)));
// 测试 mqttPassword 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setMqttPassword(null)));
// 测试 authType 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setAuthType(null)));
// 测试 latitude 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setLatitude(null)));
// 测试 longitude 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setLongitude(null)));
// 测试 areaId 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setAreaId(null)));
// 测试 address 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setAddress(null)));
// 测试 serialNumber 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setSerialNumber(null)));
// 测试 createTime 不匹配
deviceMapper.insert(cloneIgnoreId(dbDevice, o -> o.setCreateTime(null)));
// 准备参数
IotDevicePageReqVO reqVO = new IotDevicePageReqVO();
reqVO.setDeviceKey(null);
reqVO.setDeviceName(null);
reqVO.setProductId(null);
reqVO.setProductKey(null);
reqVO.setDeviceType(null);
reqVO.setNickname(null);
reqVO.setGatewayId(null);
reqVO.setStatus(null);
reqVO.setStatusLastUpdateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setLastOnlineTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setLastOfflineTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setActiveTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setIp(null);
reqVO.setFirmwareVersion(null);
reqVO.setDeviceSecret(null);
reqVO.setMqttClientId(null);
reqVO.setMqttUsername(null);
reqVO.setMqttPassword(null);
reqVO.setAuthType(null);
reqVO.setLatitude(null);
reqVO.setLongitude(null);
reqVO.setAreaId(null);
reqVO.setAddress(null);
reqVO.setSerialNumber(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<IotDeviceDO> pageResult = deviceService.getDevicePage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbDevice, pageResult.getList().get(0));
}
}

View File

@@ -1,71 +0,0 @@
package cn.iocoder.yudao.module.iot.service.thinkmodelfunction;
import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.iot.controller.admin.thinkmodelfunction.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.thinkmodelfunction.IotThinkModelFunctionDO;
import cn.iocoder.yudao.module.iot.dal.mysql.thinkmodelfunction.IotThinkModelFunctionMapper;
import org.springframework.context.annotation.Import;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* {@link IotThinkModelFunctionServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(IotThinkModelFunctionServiceImpl.class)
public class IotThinkModelFunctionServiceImplTest extends BaseDbUnitTest {
@Resource
private IotThinkModelFunctionServiceImpl thinkModelFunctionService;
@Resource
private IotThinkModelFunctionMapper thinkModelFunctionMapper;
@Test
public void testCreateThinkModelFunction_success() {
// 准备参数
IotThinkModelFunctionSaveReqVO createReqVO = randomPojo(IotThinkModelFunctionSaveReqVO.class);
// 调用
Long thinkModelFunctionId = thinkModelFunctionService.createThinkModelFunction(createReqVO);
// 断言
assertNotNull(thinkModelFunctionId);
// 校验记录的属性是否正确
IotThinkModelFunctionDO thinkModelFunction = thinkModelFunctionMapper.selectById(thinkModelFunctionId);
assertPojoEquals(createReqVO, thinkModelFunction, "id");
}
@Test
public void testDeleteThinkModelFunction_success() {
// mock 数据
IotThinkModelFunctionDO dbThinkModelFunction = randomPojo(IotThinkModelFunctionDO.class);
thinkModelFunctionMapper.insert(dbThinkModelFunction);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbThinkModelFunction.getId();
// 调用
thinkModelFunctionService.deleteThinkModelFunction(id);
// 校验数据不存在了
assertNull(thinkModelFunctionMapper.selectById(id));
}
@Test
public void testDeleteThinkModelFunction_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> thinkModelFunctionService.deleteThinkModelFunction(id), THINK_MODEL_FUNCTION_NOT_EXISTS);
}
}