1. 程式人生 > >Ubuntu Truffle 建立及編譯測試合約基礎

Ubuntu Truffle 建立及編譯測試合約基礎

Truffle:

在此宣告,本文僅基於V3.2.1版本為基礎,可適用於3.X版本,因為Truffle近幾版改動也是較大,因此可能具有一定的時效性。

目錄結構:

基於我上一篇文章配置後,專案目錄將會如下:


app:前端介面的展示,也就是localhost:8080時所展示的介面。

build:當執行truffle migrate時,會自動將contracts裡面的.sol合約檔案編譯成.json檔案。

contracts:合約檔案儲存地,.sol檔案。

migrations:執行truffle migrate時的一些配置。

node_modules:執行時的核心程式碼。

test:用於測試合約,執行命令truffle test。

建立合約:

在./contracts目錄下建立一個新的合約,起名為 SimpleStorage.sol,並新增以下程式碼:

pragma solidity ^0.4.0;  
contract SimpleStorage {  
    function multiply(uint a) returns(uint d) {
        return a * 7;
    }
} 
以上合約的意思是,隨便收到一個數,並將它乘以7。

新增配置:

在./migrations目錄下,開啟 2_deploy_contracts.js 檔案,並進行修改。

在開頭,新增:

var SimpleStorage = artifacts.require("./SimpleStorage.sol");
在 module.exports = function(deployer) {......} 中新增:
deployer.deploy(SimpleStorage);

新增測試:

在./test目錄下,新建 TestSimpleStorage.sol,用於測試上述合約。在Truffle中,可使用.js與.sol來測試合約,這裡我僅使用.sol進行測試。

新增以下程式碼:

pragma solidity ^0.4.0;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/SimpleStorage.sol";

contract TestSimpleStorage {  
    uint someValue;
    uint value;
    function testmultiply(){
          someValue=3;
          SimpleStorage aaa=SimpleStorage(DeployedAddresses.SimpleStorage());
          value = aaa.multiply(someValue);
          uint expected = 21;
          Assert.equal(value, expected, "should 3*7=21");
    }
} 

執行測試:

在專案的根目錄下開啟控制檯,輸入 testrpc ,啟動testrpc :


執行truffle migrate,如果以前有編譯過別的亂七八糟的合約,怕環境出問題,可以使用truffle migrate --reset:


執行 truffle test,進行合約的測試,可以具體指明測試哪個,如不具體指明,則測試所有的:


這是通過測試的截圖。

可以試著將TestSimpleStorage.sol中的程式碼稍作替換:

uint expected = 21; -->uint expected = 22;
就可以看見出錯的場景了:


至於.sol具體怎麼編譯,以上程式碼表達什麼,這裡也就不贅述了,可以去參考官方文件 http://truffleframework.com/docs/getting_started/solidity-tests。