package cn.iocoder.yudao.module.iot.service.rule.data.action;
|
|
import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
|
import com.zaxxer.hikari.HikariDataSource;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.Mock;
|
import org.mockito.MockitoAnnotations;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import javax.sql.DataSource;
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.mockito.Mockito.*;
|
|
/**
|
* {@link IotDatabaseDataRuleAction} 的单元测试
|
*
|
* @author HUIHUI
|
*/
|
class IotDatabaseDataRuleActionTest {
|
|
private IotDatabaseDataRuleAction databaseDataRuleAction;
|
|
@Mock
|
private JdbcTemplate jdbcTemplate;
|
|
@BeforeEach
|
public void setUp() {
|
MockitoAnnotations.openMocks(this);
|
databaseDataRuleAction = new IotDatabaseDataRuleAction();
|
}
|
|
@Test
|
public void testGetType() {
|
// 调用 & 断言:返回 Database 类型枚举值
|
assertEquals(IotDataSinkTypeEnum.DATABASE.getType(), databaseDataRuleAction.getType());
|
}
|
|
@Test
|
public void testCloseProducer_whenHikari() throws Exception {
|
// 准备:底层是 HikariDataSource
|
HikariDataSource hikari = mock(HikariDataSource.class);
|
when(jdbcTemplate.getDataSource()).thenReturn(hikari);
|
|
// 调用
|
databaseDataRuleAction.closeProducer(jdbcTemplate);
|
|
// 断言:HikariDataSource 被关闭
|
verify(hikari, times(1)).close();
|
}
|
|
@Test
|
public void testCloseProducer_whenNotHikari() throws Exception {
|
// 准备:底层不是 HikariDataSource,避免误调 close
|
DataSource other = mock(DataSource.class);
|
when(jdbcTemplate.getDataSource()).thenReturn(other);
|
|
// 调用 & 断言:不抛异常,且不会尝试关闭非 Hikari 数据源
|
assertDoesNotThrow(() -> databaseDataRuleAction.closeProducer(jdbcTemplate));
|
verifyNoInteractions(other);
|
}
|
|
}
|