로메오의 블로그

[DApp] Solidity test 코드 작성하기 본문

Backend/Python & Blockchain

[DApp] Solidity test 코드 작성하기

romeoh 2019. 7. 6. 19:58
반응형

CANDIDATE 등록, 확인하기

위 포스트에서 작성한 코드를 그대로 사용하겠습니다.

 

 테스트파일 생성

touch test/election.spec.js

test/election.spec.js

const Election = artifacts.require('./Election.sol')

contract('Election', accounts => {

    it('후보자 두 명 등록하면 candidatesCount는 2명 이다.', () => {
        return Election.deployed()
            .then(instance => {
                // 두명의 후보자를 등록합니다.
                instance.addCandidate('romeoh')
                instance.addCandidate('doraemong')
                
                // candidatesCount를 반환한다.
                return instance.candidatesCount()
            })
            .then(count => {
                // count는 2 다.
                assert.equal(count, 2)
            })
    })
})

 

테스트 실행

$ truffle test

테스트가 통과 되었습니다.

 

후보자 데이터 테스트

test/election.spec.js 에 계속 테스트를 추가합니다.

const Election = artifacts.require('./Election.sol')

contract('Election', accounts => {

	....
    
    it('후보자 정보를 검증한다.', () => {
        return Election.deployed()
            .then(instance => {
                electionInstance = instance
                
                // 첫번째 후보자를 반환한다.
                // 위 테스트 코드에서 이미 두명의 후보자가 등록되어 있음
                return electionInstance.candidates(1)
            })
            .then(candidate => {
                assert.equal(candidate[0], 1, '첫번째 후보자 기호는 1번이다.')
                assert.equal(candidate[1], 'romeoh', '첫번째 후보자 이름은 romeoh다.')
                assert.equal(candidate[2], 0, '첫번째 후보자 득표는 0 이다.')
                
                // 두번째 후보자를 반환한다.
                return electionInstance.candidates(2)
            })
            .then(candidate => {
                assert.equal(candidate[0], 2, '두번째 후보자 기호는 2번이다.')
                assert.equal(candidate[1], 'doraemong', '두번째 후보자 이름은 doraemong이다.')
                assert.equal(candidate[2], 0, '두번째 후보자 득표는 0 이다.')
            })
    })
})

테스트 실행

$ truffle test

두개의 테스트가 모두 통과 했습니다.

 

 

test/election.spec.js 전체 코드

const Election = artifacts.require('./Election.sol')

contract('Election', accounts => {

    it('후보자 두 명 등록하면 candidatesCount는 2명 이다.', () => {
        return Election.deployed()
            .then(instance => {
                // 두명의 후보자를 등록합니다.
                instance.addCandidate('romeoh')
                instance.addCandidate('doraemong')
                
                // candidatesCount를 반환한다.
                return instance.candidatesCount()
            })
            .then(count => {
                // count는 2 다.
                assert.equal(count, 2)
            })
    })

    it('후보자 정보를 검증한다.', () => {
        return Election.deployed()
            .then(instance => {
                electionInstance = instance
                // 두명의 후보자를 등록합니다.
                electionInstance.addCandidate('romeoh')
                electionInstance.addCandidate('doraemong')
                
                // 첫번째 후보자를 반환한다.
                return electionInstance.candidates(1)
            })
            .then(candidate => {
                assert.equal(candidate[0], 1, '첫번째 후보자 기호는 1번이다.')
                assert.equal(candidate[1], 'romeoh', '첫번째 후보자 이름은 romeoh다.')
                assert.equal(candidate[2], 0, '첫번째 후보자 득표는 0 이다.')
                
                // 두번째 후보자를 반환한다.
                return electionInstance.candidates(2)
            })
            .then(candidate => {
                assert.equal(candidate[0], 2, '두번째 후보자 기호는 2번이다.')
                assert.equal(candidate[1], 'doraemong', '두번째 후보자 이름은 doraemong이다.')
                assert.equal(candidate[2], 0, '두번째 후보자 득표는 0 이다.')
            })
    })
})

 

 

 

 

 

 

 

반응형
Comments