일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ethers v6
- ethers type
- 체인의정석
- 티스토리챌린지
- chainlink 설명
- erc4337
- 컨트렉트 배포 자동화
- 스마트 컨트렉트 함수이름 중복
- 머신러닝기초
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트컨트렉트테스트
- Vue.js
- 스마트컨트렉트 함수이름 중복 호출
- git rebase
- 컨트렉트 동일한 함수이름 호출
- multicall
- ethers websocket
- erc4337 contract
- 러스트 기초 학습
- 러스트 기초
- vue기초
- 계정추상화
- ethers typescript
- 러스트기초
- SBT표준
- ambiguous function description
- 오블완
- ethers
- rust 기초
- Vue
Archives
- Today
- Total
체인의정석
hardhat 사용법 정리 04- 테스트코드 작성하기 2 본문
728x90
반응형
Require과 Assert를 사용하는 방법
1. 함수가 실패해야 할 경우 실패를 하게 만든다.
2. 배후에 실행되는 것을 확실하게 하기 위하여 이전에는 실행이 되지 않게 require를 사용해야 한다.
3. 자신이나, 테스터에게 함수가 실패할 수 있을 경우를 상기시키기 위하여 사용한다.
require 형태의 실패를 유발하기 위하여 DRY를 지키는 것이 중요하다. 그리고 해피케이스의 최소 조건에서 멀어진 단위테스트를 하면 fail이 일어나게 한다.
또한 각 함수의 유니크한 require 메세지를 통하여 왜 실패하였는지를 밝히는 것이 중요하다.
테스트 Modifier에 대하여
require 체크와 유사하게 모든 modifier들은 테스트를 해야 한다. 예를 들어 submitProposal 단위 테스트는 onlyDelegate modifier를 체크하도록 하고 있다. 이러한 테스트 제한자는 internal을 사용하여 실패하는 선택지에서 실패가 발생하는지를 살펴봐야한다.
모든 경로의 코드를 테스트하기
if (a && b)와 같이 분기가 있을 경우 a 케이스와 b케이스를 분리하여 모두 테스트를 진행한다.
로직에 따른 테스트 과정
다음과 같이 로직에 따른 테스트 과정 설계가 중요하다. 2년전 작업을 했을때도 정말 오랜기간 작업한 부분중에 하나이다.
- constructor
- submitProposal
- submitVote
- processProposal
- ragequit
- abort
- updateDelegateKey
- more complex tests (multi-member/proposal)
The unit tests for each function are organized as follows:
- happy cases
- trigger requires
- check modifiers
- edge cases
728x90
반응형
'블록체인 > Ethers & web3' 카테고리의 다른 글
ethers.js에서 keccak256 사용하기 (0) | 2022.02.13 |
---|---|
ether.js에서 HexPad 하기 (0) | 2022.02.11 |
hardhat 오류 해결) bytes32 형태의 값 넣는 방법 (0) | 2022.01.27 |
hardhat 사용법 정리 03- 테스트코드 작성하기 (0) | 2022.01.18 |
hardhat 사용법 정리 01- 하드햇 설치 및 기본세팅 진행 (0) | 2022.01.17 |
Comments