Pārlūkot izejas kodu

增加枚举处理器测试用例.

nieqiuqiu 6 gadi atpakaļ
vecāks
revīzija
de3fd140af

+ 1 - 0
build.gradle

@@ -111,6 +111,7 @@ subprojects {
         testCompileOnly "${lib.'mockito-all'}"
         testCompile "${lib.'junit-jupiter-api'}"
         testRuntime "${lib.'junit-jupiter-engine'}"
+        testCompile 'org.mockito:mockito-junit-jupiter:2.23.4'
     }
 
     task sourcesJar(type: Jar) {

+ 1 - 0
mybatis-plus-extension/build.gradle

@@ -25,4 +25,5 @@ dependencies {
     testCompile "${lib.postgresql}"
     testCompile lib.oracle as ConfigurableFileTree
     testCompile "${lib.mysql}"
+    testCompile "${lib.'logback-classic'}"
 }

+ 3 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/EnumTypeHandler.java

@@ -58,7 +58,7 @@ public class EnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler<
 
     @Override
     public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
-        if (null == rs.getString(columnName) && rs.wasNull()) {
+        if (null == rs.getObject(columnName) && rs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, rs.getObject(columnName));
@@ -66,7 +66,7 @@ public class EnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler<
 
     @Override
     public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
-        if (null == rs.getString(columnIndex) && rs.wasNull()) {
+        if (null == rs.getObject(columnIndex) && rs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, rs.getObject(columnIndex));
@@ -74,7 +74,7 @@ public class EnumTypeHandler<E extends Enum<?> & IEnum> extends BaseTypeHandler<
 
     @Override
     public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
-        if (null == cs.getString(columnIndex) && cs.wasNull()) {
+        if (null == cs.getObject(columnIndex) && cs.wasNull()) {
             return null;
         }
         return EnumUtils.valueOf(type, cs.getObject(columnIndex));

+ 25 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/handlers/BaseTypeHandlerTest.java

@@ -0,0 +1,25 @@
+package com.baomidou.mybatisplus.extension.handlers;
+
+import org.mockito.Mock;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+public abstract class BaseTypeHandlerTest {
+
+    @Mock
+    protected ResultSet resultSet;
+    @Mock
+    protected PreparedStatement preparedStatement;
+    @Mock
+    protected CallableStatement callableStatement;
+
+    public abstract void setParameter() throws Exception;
+
+    public abstract void getResultFromResultSetByColumnName() throws Exception;
+
+    public abstract void getResultFromResultSetByColumnIndex() throws Exception;
+
+    public abstract void getResultFromCallableStatement() throws Exception;
+}

+ 77 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/handlers/EnumAnnotationTypeHandlerTest.java

@@ -0,0 +1,77 @@
+package com.baomidou.mybatisplus.extension.handlers;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.TypeHandler;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+public class EnumAnnotationTypeHandlerTest extends BaseTypeHandlerTest {
+
+    private static final TypeHandler<SexEnum> HANDLER = new EnumAnnotationTypeHandler<>(SexEnum.class);
+
+    @Getter
+    @AllArgsConstructor
+    enum SexEnum {
+        MAN(1, "男人"), WO_MAN(2, "女人");
+        @EnumValue
+        Integer code;
+        String desc;
+    }
+
+    @Test
+    @Override
+    public void setParameter() throws Exception {
+        HANDLER.setParameter(preparedStatement, 1, null, JdbcType.INTEGER);
+        verify(preparedStatement).setNull(1, JdbcType.INTEGER.TYPE_CODE);
+        HANDLER.setParameter(preparedStatement, 2, SexEnum.MAN, null);
+        verify(preparedStatement).setObject(2, 1);
+        HANDLER.setParameter(preparedStatement, 3, SexEnum.WO_MAN, null);
+        verify(preparedStatement).setObject(3, 2);
+    }
+
+    @Test
+    @Override
+    public void getResultFromResultSetByColumnName() throws Exception {
+        when(resultSet.getObject("column")).thenReturn(null);
+        assertEquals(null, HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(resultSet, "column"));
+    }
+
+    @Test
+    @Override
+    public void getResultFromResultSetByColumnIndex() throws Exception {
+        when(resultSet.getObject(1)).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(resultSet, 1));
+        when(resultSet.getObject(2)).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(resultSet, 2));
+        when(resultSet.getObject(3)).thenReturn(null);
+        assertEquals(null, HANDLER.getResult(resultSet, 3));
+    }
+
+    @Test
+    @Override
+    public void getResultFromCallableStatement() throws Exception {
+        when(callableStatement.getObject(1)).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(callableStatement, 1));
+        when(callableStatement.getObject(2)).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(callableStatement, 2));
+        when(callableStatement.getObject(3)).thenReturn(null);
+        assertEquals(null, HANDLER.getResult(callableStatement, 3));
+
+    }
+
+}

+ 80 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/handlers/EnumTypeHandlerTest.java

@@ -0,0 +1,80 @@
+package com.baomidou.mybatisplus.extension.handlers;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+
+import org.apache.ibatis.type.JdbcType;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+public class EnumTypeHandlerTest extends BaseTypeHandlerTest {
+
+    private static final EnumTypeHandler<SexEnum> HANDLER = new EnumTypeHandler<>(SexEnum.class);
+
+    @Getter
+    @AllArgsConstructor
+    enum SexEnum implements IEnum<Integer> {
+        MAN(1, "1"), WO_MAN(2, "2");
+        Integer code;
+        String desc;
+
+        @Override
+        public Integer getValue() {
+            return this.code;
+        }
+    }
+
+    @Test
+    @Override
+    public void setParameter() throws Exception {
+        HANDLER.setParameter(preparedStatement, 1, SexEnum.MAN, null);
+        verify(preparedStatement).setObject(1, 1);
+        HANDLER.setParameter(preparedStatement, 2, SexEnum.WO_MAN, null);
+        verify(preparedStatement).setObject(2, 2);
+        HANDLER.setParameter(preparedStatement, 3, null, JdbcType.INTEGER);
+        verify(preparedStatement).setNull(3, JdbcType.INTEGER.TYPE_CODE);
+    }
+
+    @Test
+    @Override
+    public void getResultFromResultSetByColumnName() throws Exception {
+        when(resultSet.getObject("column")).thenReturn(null);
+        assertNull(HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(resultSet, "column"));
+        when(resultSet.getObject("column")).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(resultSet, "column"));
+    }
+
+    @Test
+    @Override
+    public void getResultFromResultSetByColumnIndex() throws Exception {
+        when(resultSet.getObject(1)).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(resultSet, 1));
+        when(resultSet.getObject(2)).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(resultSet, 2));
+        when(resultSet.getObject(3)).thenReturn(null);
+        assertNull(HANDLER.getResult(resultSet, 3));
+    }
+
+    @Test
+    @Override
+    public void getResultFromCallableStatement() throws Exception {
+        when(callableStatement.getObject(1)).thenReturn(1);
+        assertEquals(SexEnum.MAN, HANDLER.getResult(callableStatement, 1));
+        when(callableStatement.getObject(2)).thenReturn(2);
+        assertEquals(SexEnum.WO_MAN, HANDLER.getResult(callableStatement, 2));
+        when(callableStatement.getObject(3)).thenReturn(null);
+        assertNull(HANDLER.getResult(callableStatement, 3));
+    }
+
+}

+ 17 - 0
mybatis-plus-extension/src/test/resources/logback.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="false" debug="false">
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoder 默认配置为PatternLayoutEncoder -->
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="com.baomidou.mybatisplus.test" level="DEBUG" additivity="false">
+        <appender-ref ref="STDOUT"/>
+    </logger>
+
+    <root level="info">
+        <appender-ref ref="STDOUT"/>
+    </root>
+</configuration>