테스트 목적으로 개인 plsql 절차에 액세스할 수 있는 방법이 있습니까?
저는 plsql 코드가 많은 프로젝트를 진행하고 있으며 우리의 코드베이스에 더 구체적인 유닛 테스트를 추가하고 싶습니다.제가 테스트하고 싶은 절차/기능 중 일부는 패키지 사양에 포함되어 있지 않으며 이를 변경할 방법이 없습니다.
이러한 '개인' plsql 절차를 사양에 추가하지 않고 액세스할 수 있는 방법이 있습니까?
지금까지 제가 가진 유일한 아이디어는 테스트 전에 DB에 테스트 대상 절차를 지정하는 특수 패키지 사양을 컴파일하는 것이었습니다.그게 효과가 있을 거라고 생각하지만, 더 간단한 방법이 있는지 궁금하다, 어떤 사악한 비밀 오라클 해킹이 있을지도 모른다 ;-)
JUNit/DBUnit로 Java에서 테스트 중입니다.
BR 프랭크
당신이 10g 이상을 섭취하고 있다면 이를 위한 방법이 있습니다.그것은 조건부 편집이라고 불립니다.이것은 컴파일 시 PL/SQL 코드를 변경할 수 있도록 특별한 구문을 제공하는 매우 깔끔한 기능입니다.
우연히 이 기능을 사용하여 사양의 개인 패키지를 노출하여 UTPLSQL 테스트를 실행할 수 있습니다.
특수 구문은 다음과 같습니다.
create or replace package my_pkg
as
$IF $$dev_env_test $THEN
PROCEDURE private_proc;
$END
FUNCTION public_function return date;
end my_pkg;
/
이중 달러 기호가 있는 변수는 조건부 컴파일 플래그입니다.
패키지를 설명하면 공용 패키지만 볼 수 있습니다.
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
이제 조건부 플래그를 설정하고 패키지를 다시 컴파일합니다. 마치 마법에 걸린 것처럼...
SQL> alter session set plsql_ccflags='dev_env_test:true'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
PROCEDURE PRIVATE_PROC
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
기능을 민영화하는 것은 당신이 생각하는 것만큼 간단합니다.
SQL> alter session set plsql_ccflags='dev_env_test:false'
2 /
Session altered.
SQL> alter package my_pkg compile
2 /
Package altered.
SQL> desc my_pkg
FUNCTION PUBLIC_FUNCTION RETURNS DATE
SQL>
조건부 컴파일로 더 많은 것을 할 수 있습니다.그것은 서류에 나와 있습니다.자세히 알아보세요.
만약 그런 일이 있다면 저는 깜짝 놀랄 것입니다.개인 절차, 기능 및 변수의 전체적인 목적은 패키지 외부의 응용 프로그램에 표시되지 않는 것입니다.
@Robert가 말했듯이, 패키지 외부의 패키지 본문에서만 선언된 어떤 것에도 액세스할 수 없어야 합니다.또한 장치 테스트를 실행하기 위한 "특수" 규격을 만드는 것도 효과가 없을 수 있습니다. 본문에 포워드 선언(일반적으로 본문의 시작 부분에 있는 사양과 같은 문장)이 포함되어 있으면 "특수" 규격이 해당 선언과 충돌하고 패키지가 컴파일되지 않습니다.
pl/sql 개발자를 사용하여 pl/sql 프로시저를 테스트할 수 있습니다.
패키지로 이동합니다.--> 절차/기능
마우스 오른쪽 버튼을 클릭하고 "테스트"를 선택합니다.
입력 파라미터를 입력하고 실행/실행 버튼을 클릭하여 결과를 확인합니다.
다양한 데이터 세트를 사용하여 실행하고 대상 테이블을 체크인할 수 있습니다.
잘못된 데이터로 실행하고 예상 오류를 확인합니다.
자세한 내용은 http://www.handyinsight.com/2016/06/database-testing.html 에서 확인하실 수 있습니다.
템루즈인
언급URL : https://stackoverflow.com/questions/6761782/is-there-a-way-to-access-private-plsql-procedures-for-testing-purposes
'programing' 카테고리의 다른 글
Mongo 오류:이 MongoDB 배포는 재시도 가능한 쓰기를 지원하지 않습니다.연결 문자열에 retryWrites=false를 추가하십시오. (0) | 2023.07.01 |
---|---|
정확히 무엇을 잘라내나요(날짜, 'IW')? (0) | 2023.07.01 |
unbuntu에 최신 버전의 git를 설치하는 중 (0) | 2023.07.01 |
typescript 컴파일러(tsc) 명령이 tscconfig에서 작동하지 않습니다. (0) | 2023.06.26 |
@구성 속성 대 @PropertySource 대 @Value (0) | 2023.06.26 |