[Oracle] 테이블 기준으로 테스트코드 자동으로 만들어 주는 프로시저

전상훈·2021년 5월 14일
0

오라클

목록 보기
7/7
CREATE OR REPLACE PROCEDURE UNIVCOOP_DEV.PROC_TABLE_TO_TEST_CODE
(
	V_TABLE_NAME IN VARCHAR2,
	 V_BASE_URL IN VARCHAR2,
	SQL_DESC OUT VARCHAR2
)
IS
	V_BASE_CLASS VARCHAR(20) := '';
  
BEGIN
	SQL_DESC := '';

    V_BASE_CLASS := REPLACE(INITCAP( V_TABLE_NAME  ),'_','');
   
	SQL_DESC := SQL_DESC || '@SpringBootTest' || CHR(13);
	SQL_DESC := SQL_DESC || '@AutoConfigureMockMvc' || CHR(13);
	SQL_DESC := SQL_DESC || 'class ' || V_BASE_CLASS || 'ControllerTest extends BaseControllerTest {' || CHR(13);
	SQL_DESC := SQL_DESC || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Autowired' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    private ' || V_BASE_CLASS || 'Controller controller;' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Test' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    void getList() throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '        ' || V_BASE_CLASS || 'DtoReq req = this.make' || V_BASE_CLASS || 'DtoReq();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '        new MockMvcTest<' || V_BASE_CLASS || 'Controller, ' || V_BASE_CLASS || 'DtoReq>(mvc, ctx, objectMapper, controller)' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '                .testController(req, "' || V_BASE_URL || '/getList");' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Transactional' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Test' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    void insert() throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '        ' || V_BASE_CLASS || 'Dto data = this.make' || V_BASE_CLASS || 'Dto();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '        new MockMvcTest<' || V_BASE_CLASS || 'Controller, ' || V_BASE_CLASS || 'Dto>(mvc, ctx, objectMapper, controller)' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || CHR(9) || '                .testController(data, "' || V_BASE_URL || '/insert");' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Transactional' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Test' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    void update() throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        ' || V_BASE_CLASS || 'Dto data = this.make' || V_BASE_CLASS || 'Dto();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        new MockMvcTest<' || V_BASE_CLASS || 'Controller, ' || V_BASE_CLASS || 'Dto>(mvc, ctx, objectMapper, controller)' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '                .testController(data, "' || V_BASE_URL || '/update");' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Transactional' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    @Test' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    void delete() throws Exception {' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        ' || V_BASE_CLASS || 'DtoReq req = this.make' || V_BASE_CLASS || 'DtoReq();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        new MockMvcTest<' || V_BASE_CLASS || 'Controller, ' || V_BASE_CLASS || 'DtoReq>(mvc, ctx, objectMapper, controller)' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '                .testController(req, "' || V_BASE_URL || '/delete");' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    private ' || V_BASE_CLASS || 'Dto make' || V_BASE_CLASS || 'Dto(){' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        String currentDate = Global.getDateInfo().getCurrentDay();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        String regDate = Global.getDateInfo().getCurrentDateTime();' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	
	SQL_DESC := SQL_DESC || CHR(9) || '        ' || V_BASE_CLASS || 'Dto rtn = new ' || V_BASE_CLASS || 'Dto();' || CHR(13);
	FOR C_DATA IN (SELECT * FROM V_COLUMNINFO vc WHERE TABLE_NAME = V_TABLE_NAME) 
	LOOP
	    SQL_DESC := SQL_DESC || CHR(9) || '        rtn.set' || REPLACE(INITCAP( C_DATA.COLUMN_NAME ),'_','') || '(' ;
	    SQL_DESC := SQL_DESC || CASE WHEN C_DATA.JAVA_TYPE = 'String' THEN '''value'''
	                                 WHEN C_DATA.JAVA_TYPE = 'Long' THEN '0d'
	                                 WHEN C_DATA.JAVA_TYPE = 'Integer' THEN '0'
	                                 WHEN C_DATA.JAVA_TYPE = 'Decimal' THEN '0d'
	                                 ELSE NULL 
	                                END;
	    SQL_DESC := SQL_DESC || ');' || CHR(13);
	END LOOP;
	 
	SQL_DESC := SQL_DESC || CHR(9) || '        return rtn;' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    private ' || V_BASE_CLASS || 'DtoReq make' || V_BASE_CLASS || 'DtoReq() {' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '        ' || V_BASE_CLASS || 'DtoReq rtn = new ' || V_BASE_CLASS || 'DtoReq();' || CHR(13);
	FOR C_DATA IN (SELECT * FROM V_COLUMNINFO vc WHERE TABLE_NAME = V_TABLE_NAME AND PK_FLAG = 'Y') 
	LOOP
	    SQL_DESC := SQL_DESC || CHR(9) || '        rtn.set' || REPLACE(INITCAP( C_DATA.COLUMN_NAME ),'_','') || '(' ;
	    SQL_DESC := SQL_DESC || CASE WHEN C_DATA.JAVA_TYPE = 'String' THEN '''value'''
	                                 WHEN C_DATA.JAVA_TYPE = 'Long' THEN '0d'
	                                 WHEN C_DATA.JAVA_TYPE = 'Integer' THEN '0'
	                                 WHEN C_DATA.JAVA_TYPE = 'Decimal' THEN '0d'
	                                 ELSE NULL 
	                                END;
	    SQL_DESC := SQL_DESC || ');' || CHR(13);
	END LOOP;
	SQL_DESC := SQL_DESC || CHR(9) || '        return rtn;' || CHR(13);
	SQL_DESC := SQL_DESC || CHR(9) || '    }' || CHR(13);
	SQL_DESC := SQL_DESC || '}' || CHR(13);
END;
profile
개발을 하는 사람

0개의 댓글