2017-03-27 15 views
0

私はプログラムのチュートリアルに従っています。その中で、教師は成功を示すためにブール値を返しています。彼らはとてもように書かれている:これは、あなたがこれらの機能のための真の期待と全体の機能が正常に実行されたことを示すための一つの方法ですユニットテストを書くことができることを意味しユニットテストはいつ適切ですか?

bool SomeFunc() 
{ 
    //code.... 
    return true; 
} 

。その関数内の異なるポイントの束で、あなたはエラーが発生した場合はfalseを返されたもののために異なる小切手の束を持っていた、あれば私には、これがうまくいく方法がある:

bool SomeFunc() 
{ 
    if(!someThing) 
     return false; 

    return true; 
} 

しかし、どのような場合は代わりますあなたのチェックを行う関数内で主張するのちょうど束を持っていた:

bool SomeFunc() 
{ 
    assert(someThing, "Error: thing not working"); 

    return true; 
} 

が続い理由があるだろうにまだユニットテストだけでバグをキャッチします主張する場合は、この機能?私が考えることができる唯一の理由は、単体テストをこれらの関数のリリースモードで動作させ、アサートとifステートメントの両方を追加することです(アサートは通常リリースモードではオフになるためです)。あなたの関数は、()が失敗した場合

if(function()) 
{ 
    //doSomething 
} 
else 
{ 
    //Handle error 
} 

、あなたは内部からのassert()を呼び出します。

+1

真のケースがtrueを返すかどうかだけではテストしないでください。 falseの場合はfalseを返すようにしてください。失敗することは、成功することと同じくらい重要です。 – user4581301

+0

また、重要なことです。あなたの関数が上記の最初の例で 'true'を返すかどうかのテストのほかに、単体テストはその関数が全く実行されるかどうかをテストするかもしれません。これの典型的な例は、voidを返す関数ですが、その結果、行内にいくつかの他の関数を実行します。 – dmi

+0

'assert'は通常は本番ビルドではノーオペレーションですので、代わりに例外を発生させたいかもしれません。 – juanchopanza

答えて

0

いくつかの回では、我々は次のように行います。この例のYOUTに、失敗したりしないことがあり、アクションを実行したいですプログラムの実行が停止され、何も管理できなくなります。

Imagene intからの読み込みを行うユーザープログラムを作成する場合、char型を入力すると、char型からint型へのキャストが失敗するので、正しく入力するまでプログラムがクラッシュしたり待機したりしますか?

もう1つのオプションは、他のコードブロックからキャッチして処理できる例外を発生させることです。

関連する問題