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 檔案,並進行修改。
在開頭,新增:
在 module.exports = function(deployer) {......} 中新增:var SimpleStorage = artifacts.require("./SimpleStorage.sol");
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。