programing

테스트 목적으로 개인 plsql 절차에 액세스할 수 있는 방법이 있습니까?

lastmoon 2023. 7. 1. 09:17
반응형

테스트 목적으로 개인 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

반응형