체인의정석

테스트 코드 작성에 문제가 없는데 에러가 날 경우? (예외 처리를 마무리 하지 않고 테스트할 경우 오류 발생가능) 본문

블록체인/Ethers & web3

테스트 코드 작성에 문제가 없는데 에러가 날 경우? (예외 처리를 마무리 하지 않고 테스트할 경우 오류 발생가능)

체인의정석 2022. 4. 7. 01:55
728x90
반응형

내일 테스트 환경 배포를 앞두고 최종적으로 관리자 권한 세팅을 수정하다가.

Owner를 바꿀때 Pauser나 Signer를 바꾸는 부분을 발견하였다.

 

이를 테스트하기위해 관리자를 계속해서 바꾸면서 잘못된 관리자도 넣어봤는데 실행이 되고 넘어가고 이상한 곳에서 에러가 났다.

몇시간을 봐도 에러를 찾을 수 없었고 아무리 고민해봐도 답이 안보였다.

 

하지만 스마트컨트렉트가 잘못될 경우 물어볼 곳 같은건 존재하지 않는다 ㅠㅠ 그래서 일단 배포하고 나서  같은 상황을 만든 후 tenderly를 사용해서 오류의 정확한 원인을 찾아야겠다는 결론에

 

너무 귀찮았지만 실제로 배포후 테스트해보니 에러가 안났다.

 

그 이후 테스트 코드에 잘못된 관리자가 보낼 때 예외 처리를 마무리 시키니 오류가 잡히고 정상작동 하였다.

 

Signer에서오 마찬가지로 Pauser또한 비슷했는데 결국 내가 찾은 원인은 오류메세지를 정확히 써서 예외처리를 해주지 않고 복잡한 테스트 코드를 짠다면 테스트 코드 자체가 에러가 꼬여서 뒤에 순차적으로 영향이 없는 부분도 영향이 끼쳐 이상한 곳에서까지 에러가 나는걸 확인할 수 있었다. 

 

오늘의 결론 : 잘못된 상황에 대한 예외처리를 할때는 꼭 오류 구문을 넣어서 오류상황임을 코드에 명시해주고나서 , 그 뒤의 에러를 표시해야한다. 또한 오류가 안나고 넘어가고 이상한곳에서 오류가 날 경우 원래 나야 할 오류를 정확히 명시해주면 해당 테스트 코드가 해결된다는 것이다. 

 

+) 너무너무 이해가 안 갈시 테스트 네트워크에 실제로 배포해서 오류가 진짜로 나는지와 이더스캔 verify후 함수를 실행 및 조회시키고 어디서 정확히 나는지 tenderly로 파악해보면 좋다.

      it("Should change Pauser back", async () => {
        await expect(컨트렉트명.connect(잘못된주소).changePauser(owner.address)).to.be.revertedWith(
          "PauserRole: caller does not have the Pauser role"
        );
      })
728x90
반응형
Comments