일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 컨트렉트 동일한 함수이름 호출
- 프록시배포구조
- 스마트컨트렉트프록시
- ethers v6
- 스마트 컨트렉트 함수이름 중복
- ethers websocket
- 러스트 기초
- git rebase
- ethers type
- 러스트 기초 학습
- 러스트기초
- rust 기초
- 깃허브명령어
- 스마트컨트렉트 예약어 함수이름 중복
- nestjs 튜토리얼
- nest.js설명
- Vue.js
- 스마트컨트렉트테스트
- ambiguous function description
- multicall
- 컨트렉트 배포 자동화
- SBT표준
- ethers typescript
- Vue
- vue기초
- 체인의정석
- 머신러닝기초
- 스마트컨트렉트 함수이름 중복 호출
- ethers
- chainlink 설명
- Today
- Total
체인의정석
테스트 코드 작성에 문제가 없는데 에러가 날 경우? (예외 처리를 마무리 하지 않고 테스트할 경우 오류 발생가능) 본문
테스트 코드 작성에 문제가 없는데 에러가 날 경우? (예외 처리를 마무리 하지 않고 테스트할 경우 오류 발생가능)
체인의정석 2022. 4. 7. 01:55내일 테스트 환경 배포를 앞두고 최종적으로 관리자 권한 세팅을 수정하다가.
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"
);
})
'블록체인 > Ethers & web3' 카테고리의 다른 글
배포시 회사에 이더리움 요청을 위한 gasPrice 계산하기 (0) | 2022.04.08 |
---|---|
솔리디티 개발 점검 사항) Hardhat 테스트코드 커버리지 + 오픈 소스 넣기 (0) | 2022.04.08 |
hardhat + ether js 로 스마트컨트렉트 테스트 코드 작성할 때 알아야 할 3가지 대표 유형 (0) | 2022.03.03 |
타입스크립트 백엔드와 스마트컨트렉트 연동하기 2) ABI와 CA 활용하여 트랜잭션 보내기 (0) | 2022.02.23 |
타입스크립트 백엔드와 스마트컨트렉트 연동하기 1) ABI 가져오기 (타입스크립트로 모듈 만들기) (0) | 2022.02.22 |