2017-04-06 6 views
1

현재 시간 (now)을 사용하는 함수가 있습니다. 계약 전체는 Crowdfunding 토큰이며 토큰 비용은 토큰을 구입 한 날짜와 시간에 따라 다릅니다.단위 테스트 날짜 시간 값

스마트 계약을 테스트 할 때 어떻게 다른 시간을 시뮬레이션하나요? 예를 들어, 아래 코드와 관련하여 가격 설정 코드가 맞는지 알아보기 위해 단위 테스트를하고 싶지만 now 값을 변경할 수는 없습니다.

now 키워드를 다른 임시 테스트 변수 (예 : now_sim)로 대체 한 다음 시뮬레이션 중에 now_sim을 수동으로 변경하는 것이 좋은 해결책입니까?

if (now < (startTime + 1 days)) { 
     currentPrice = safeDiv(safeMul(price, 80), 100); // 20 % discount (x * 80/100) 
    } 
    else if (now < (startTime + 2 days)) { 
     currentPrice = safeDiv(safeMul(price, 90), 100); // 10 % discount (x * 90/100) 
    } 
    else if (now < (startTime + 12 days)) { 
     // 1 % reduction in the discounted rate from day 2 until day 12 (sliding scale per second) 
     // 8640000 is 60 x 60 x 24 x 100 (100 for 1%) (60 x 60 x 24 for seconds per day) 
     currentPrice = price - safeDiv(safeMul((startTime + 12 days) - now), price), 8640000); 
    } 
    else { 
     currentPrice = price; 
    } 

답변

1

당신이 테스트를 위해 pyethereum 사용하는 경우 - 내가보기 엔 추천, 그것은 사랑 - 당신이 직접 거래를 채굴하는 시뮬레이션 블록의 타임 스탬프를 변경할 수 있습니다.

self.s = t.state() 
self.s.block.timestamp = self.s.block.timestamp + 86400 
self.s.mine(1) 
some_val = your_contract.do_something(some_parameter) 
self.assertEqual(some_val, whatever) 

여기에 작업 예제를 참조하십시오 (아마도 조금 오래된) : https://github.com/realitykeys/subjectivocracy/blob/master/contracts/test.py#L85