アプリケーションのテスト方法


メインネットで実際のBitcoinを扱うソフトウェアにとって、アプリケーションのテストは非常に重要なステップです。この記事では、Bitcoinアプリケーションのテストに使用される一般的な方法について説明します。

テストネット

テストネットはBitcoinコミュニティにおいて別々に動作する、Bitcoinネットワークの並列インスタンスです。テストネット上のコインは価値がなく、http://faucet.xeno-genesis.com/http://tpfaucet.appspot.com/のようなテストネットのサイトから無料で入手できます。

MainNetParams.get()の代わりにTestNetParams.get()を使用してオブジェクトをインスタンス化することで、アプリケーションでテストネットを使用させることができます。ウォレットツールアプリは"-- net = TEST"のフラグを受け入れます。

テストネットが便利なのは間違いありませんが、時には間違えてASICを使用してテストネットをマイニングすることもあります。このような問題はメインネットワークでは発生しません。もし数秒間隔で多くのブロックを見つけたり、懸賞に失敗したブロックがある場合はリグレッションテストネットワークに切り替えた方が有効です。リグレッションテストモードは予測可能で制御されています。

リグレッションテストモード

テストネットは今のところ良好ですが、1ブロックが10分毎にしか採掘されないという問題があります。リグレッションテストモードの場合、新しいブロックを待つ必もテスト用のコインを貰えるサイトを使用する必要もありません。

BitcoinCore0.9からregtestモードという新しいモードがあります。bitcoind(Bitcoinのクライアントソフト)次のようにregtestモードを実行できます。

./bitcoind -regtest

実行されている画面と、別の画面で以下のコマンドを実行することができます。

./bitcoin-cli -regtest setgenerate true 101

...要求に応じて新しい101個のブロックが作成されます。
Regtestモードでは、ネットワークパラメータのさらに別のセットを使用する必要があります。
RegTestParams.get()はローカルでのみ実行するように設計されています。パブリックなregtestネットワークはありません。 PeerGroup.
connectToLocalHost()を使用すると、ローカルビットコアと通信できます。

新たに採掘されたコインは成熟しなければならないことに注意してください(これは一般的なBitcoinルールです)。 つまり、100ブロック分の費用がかからないということです。 上のコマンドの数字101は、ブロックするブロックの数を選択します。 したがって、これはあなたにお金を費やす必要があります。 次に、あなたはこのようにあなたのアプリにいくつかのテストコインを送ることができます:

./bitcoin-cli -regtest sendtoaddress <address of your app goes here> 10.0
./bitcoin-cli -regtest setgenerate true 1

ブロックチェーンなどは〜/ .bitcoin / regtestに格納されていますので、最初からやり直すには削除するか、-datadirを使用してファイルを別の場所に保存してください。

wallet-toolには、 - net = REGTEST --peers = localhostを使用してこのモードを使用させることができます。

現在、bitcoinjにはBitcoin Core RPCインターフェイスをラップし、regtestモードを駆動するクラスはありませんが、将来的には良い機能になるでしょう。

単体テスト

Bitcoinjは、偽のTransactionオブジェクトの作成などを行うことができるTestUtilsクラスを提供します。 bitcoinj自体のテストスイートを見て、ユーティリティの使い方を見てください。 単体テストはあなたのソフトウェアに堅牢性を持たせるための素晴らしい方法ですが、Bitcoinプロトコルの多くの微妙な複雑さのため、正常に動作することを保証するには必ずしも十分ではありません。