2016-08-11 9 views
1

私はUnit Testingの初心者ですので、私と一緒に裸にしてください。パラメーターを取るメソッドのユニットテストの方法

は、私は、その入力として、Stringintまたは他のタイプをとるsomeMethodを考えてみましょう。

このsomeMethodのユニットテストを作成したい場合は、自分の指定したStringとIntでメソッドを生成し、それをテストを通して実行しますか?私のテストは自分の入力に依存しないでしょうか?

おそらくその値(文字列とint入力)は別の関数から来ていると思いますので、その関数のための別の単体テストが必要でしょうか?

+1

テストで使用するランダムな文字列/ int出力を返す関数を作成しないのはなぜですか?したがって、幅広い値をテストします。 – SpellChucker

+0

@ToddVrba私は初心者ですので、私はそれを考えませんでした。私はそれをすることができると思います。 – Honey

+3

@ToddVrba単体テストでランダムなデータを使用することは、通常はお勧めできません。これは、テストが1つのコンパイルに合格し、別のコンパイルで失敗したという結果に終わります。代わりに、いくつかの典型的な入力値を作成してテストし、実行間の一貫性を確保する必要があります。このトリックは入力値を包括的に扱っています。 – ColGraff

答えて

3

入力のためのパラメータ(およびグローバル/インスタンスの状態ではない)と出力の戻り値のみに依存する関数(またはメソッド)は、実際には最も簡単にテストするものです。彼らはpure functionsと呼ばれています。簡単にテスト可能であるため、「純粋な」関数に多くのコードが存在するように努力することがますます普及しています。

サンプル入力(ハードコードされた値、模擬フレームワーク、テストデータベースなど)を入力し、出力を期待どおりに比較します。

一方、テストで非純粋な関数/メソッドを扱うことははるかに困難です。特定の前提条件にインスタンスの状態を設定し、テストするメソッドを呼び出してから、インスタンスを突然変異後にテストする必要があります。それははるかに長いプロセスです。

+0

あなたはチェックしないもしあなたがあなたのアプリケーションを強制的にアンラッピングしてクラッシュさせるのであれば、あなたはあなたのアプリケーションを強制的にアンラッピングしてクラッシュさせるでしょうか? – Honey

+2

あなたのサンプル入力は、オプションのパラメータを扱っています)、ノンセンス入力など – Alexander

+0

は実際の開発コードですでに行われていないはずですか? – Honey

1

単体テストは主にインターフェイスをテストするためのもので、コードの動作を定義し、その動作をテストしています。たとえば、Stringを大文字にする一連のコードがあります。あなたは、テキストの異なるセットのカップルを渡すと、彼らが動作することを確認します:

Input | Expected Output | Rationale 
------------------------------- 
test | TEST   | all lower 
Test | TEST   | initial caps 
tEst | TEST   | middle caps 
tesT | TEST   | last caps 
foo | FOO    | checking different string 
1foo | 1FOO   | mixed string 

等...

をはい、あなたのユニットテストは、総合的にし、できるだけ多くのコードをカバーしようとする必要があります。個々の機能をテストすることはできますが、オブジェクト、プロトコル、重要なスタンドアロン機能のインタフェースをテストすることが重要です。それがユニットテストと呼ばれる理由です。個々の部分ではなく、ブロックまたはコードの単位をテストしています。

+0

だから、それぞれ異なるtestCaseですか?私はTestAllLower、TestInitialCapsなどを持っていますか? – Honey

+0

理想的には、はい。しかし、同様の機能をテストしている場合、複数のテストケースを1つのテストに組み合わせることは意味があります。テストケースが失敗した場合、何が失敗したかを理解するのがどれほど難しいでしょうか? 1つのテストで複数のテストケースがあると、テストが複雑になります。 – ColGraff

+0

複数のAssertを1つのケースに1つずつ配置するのではなく、1つのケースに配置することを意味しますか? – Honey