solidity로 이더리움 스마트 계약을 만들었다면
생각대로 처리가 잘 되는지 검증을 위해 테스트를 해야 겠죠.
상태변수에는 값이 제대로 들어가는지
함수 결과가 맞는지
지갑 주소는 무엇인지
parameter 인자값을 임의로 변경해서 테스트하기 등...
truffle에 내장된 test 기능을 이용해서 쉽게 테스트 해볼수 있습니다.
● truffle console 접속
truffle console --network [네트워크 이름]
사설 테스트넷에 접속해서 이더리움 블록체인에서 테스트를 진행합니다.
C:\pjdapp>truffle console --network localnw truffle(localnw)> ▶ truffle(네트워크 이름)이 나오면 정상 접속된거에요. ♣ truffle-config.js 파일에 설정한 네트워크 이름 참조합니다. networks: { localnw: { host: "127.0.0.1", // Localhost (default: none) port: 7545, // Standard Ethereum port (default: none) network_id: "1337", // Any network (default: none) } } |
● solidity로 작성된 문자열 입/출력하는 간단한 스마트 계약
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.10; contract Hello { //상태변수 선언 string public greet; //생성자 constructor(string memory _greet) { greet = _greet; } //문자열 입력 받아 상태변수에 저장 function setGreet(string memory _greet) public { greet = _greet; } //상태변수에 저장된 문자열 출력하기 function getGreet() public view returns(string memory){ return greet; } } |
● truffle test 준비
프로젝트 폴더안에 test 폴더가 존재합니다.
test 폴더안에 테스트 수행 js 파일을 넣어두세요.
C:\pjdapp>dir C 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: A8FA-0147 C:\pjdapp 디렉터리 2021-12-21 오후 04:12 <DIR> . 2021-12-21 오후 04:12 <DIR> .. 2021-12-21 오후 03:44 <DIR> build 2021-12-21 오후 10:57 <DIR> contracts 2021-12-21 오후 11:14 <DIR> migrations 2021-12-21 오후 03:43 <DIR> test 2021-12-22 오후 09:15 3,173 truffle-config.js 2개 파일 6,223 바이트 6개 디렉터리 72,778,452,992 바이트 남음 C:\pjdapp>cd test C:\pjdapp\test>dir C 드라이브의 볼륨에는 이름이 없습니다. 볼륨 일련 번호: A8FA-0147 C:\pjdapp\test 디렉터리 2021-12-23 오후 04:32 <DIR> . 2021-12-23 오후 04:32 <DIR> .. 2021-12-20 오후 10:57 0 .gitkeep 2021-12-23 오후 05:29 641 hello_test.js 3개 파일 1,139 바이트 2개 디렉터리 72,741,801,984 바이트 남음 |
● hello_test.js
Hello라는 contract에 대한 테스트 수행 JS를 만듭니다.
파일명(hello_test.js)은 규칙이 없으니 편한대로 정하세요.
//Hello라는 contract를 반환 const Hello = artifacts.require("Hello"); //beforeEach와 afterEach함수는 test 전과 후에 호출되며 //async와 await 키워드로 node.js의 비동기 처리 //user0,user1...user9 10개까지 가능하며 접속한 블록체인 계정(지갑)주소입니다. contract('Hello', function([user0,user1,user2]){ let hello; //테스트 실행 단위 it 실행 전 beforeEach(async () =>{ console.log(''); console.log('Before each'); hello = await Hello.new('Big Start Hello'); }) //테스트 실행 단위 it 실행 후 afterEach(async () =>{ console.log('After each'); console.log('Good bye'); }) //첫번째 it - 기본 테스트 it('Basic test',async () =>{ console.log('Basic test'); let igreet = await hello.greet(); //상태 변수 greet 값 확인 let ivalue1 = await hello.getGreet(); //getGreet 함수 결과 확인 //console.log안에 `는 작은따옴표가 아니고 숫자 1 왼쪽의 그레이브입니다. console.log(`user0 addr : ${user0}`); //첫번째 지갑 주소 console.log(`vari greet : ${igreet}`); console.log(`fun getGreet1 : ${ivalue1}`); }) //두번째 it - 문자열 입력 후 greet 변수 값 변경 확인 it('greet value change test', async () =>{ console.log('Change test'); let value1 = 'greet change'; let value2; await hello.setGreet(value1); //setGreet 함수에 value1값 지정해서 수행 value2 = await hello.greet(); console.log(`change value2 : ${value2}`); }) }); |
● 테스트 수행
truffle test [js파일]
js파일 지정하지 않고 truffle test를 수행하면 test 폴더안의 모든 js파일을 실행합니다.
지금은 하나만 있어 js파일 입력 안해도 상관없지만
많을 경우에는 시간이 좀 걸리니 꼭 지정해서 테스트 수행해주세요.
그리고 js파일이 truffle console 접속할때의 폴더와 다른 폴더에 있을때는
경로도 같이 지정해야 됩니다.
truffle test C:/pjdapp/test/hello_test.js 또는 truffle test test/hello_test.js
truffle(localnw)> truffle test hello_test.js Using network 'localnw'. Compiling your contracts... =========================== > Compiling .\contracts\Hello.sol > Compiling .\contracts\Migrations.sol > Artifacts written to C:\Users\bedro\AppData\Local\Temp\test--5384-LG4DJwxC1Kri > Compiled successfully using: - solc: 0.8.10+commit.fc410830.Emscripten.clang Contract: Hello Before each Basic test user0 addr : 0x455f67C03e7f834e30cF0Ad17c984C47034C0A38 vari greet : Big Start Hello fun getGreet1 : Big Start Hello √ Basic test (523ms) After each Good bye Before each Change test change value2 : greet change √ greet value change test (4055ms) After each Good bye 2 passing (8s) truffle(localnw)> |
여기까지 truffle 스마트 계약 테스트까지 끝나고
이더리움 DApp 개발에 필요한 사전 지식은 어느정도 마무리 된거 같아요.
이렇게 준비하면서 solidity와 js에 대한 지식이 부족한거 같아
개발 언어를 더 공부해야 겠다는 생각이 들었습니다.^^;;
감사합니다.
'IT > 이더리움 Ethereum' 카테고리의 다른 글
이더리움 DApp 개발 . Ganache + MetaMask 연동 (0) | 2022.09.24 |
---|---|
이더리움 DApp 개발 . Truffle + Ganache 연동 . smart contract 배포 (0) | 2022.09.24 |
이더리움 DApp 개발을 위한 Truffle(트러플) 설치하기 . solidity 컴파일 (0) | 2022.09.23 |
이더리움 DApp 개발을 위한 Node.js 설치하기 (1) | 2022.09.23 |
이더리움 로컬 개발 플랫폼 Ganache 설치하기 (0) | 2022.09.22 |
댓글