2017-05-31 20 views
2

私は現在、JUnitテストを実装する方法を学んでいると私は私のスタックの実装のためのisEmpty()メソッドに苦しんでいます。これは私がテストしたい方法です:JUnitテスト()スタック方式

boolean isEmpty(){ 
    if(firstFree == 0) return true; 
    else return false; 
} 

そして、これは私のテストで:スタックは要素かどうかを持っている場合は違いはありません

public void isEmptyTest(){ 
    assertTrue(onpStack.isEmpty()); 
    assertFalse(onpStack.isEmpty()); 
} 

- テストは常に失敗します。私は理由を知っています。なぜなら、同じ時間に要素を持つことはできないし、持たないからです。どちらの場合でもテストをパスする方法を理解できません。適切な方法がありますか?または、このisEmpty()メソッドに対して2つの異なるテストを行う必要がありますか?

+0

はい、あなたはそれぞれの期待出力に別々のユニットテストを行う必要があります。 –

+1

あなたはそれぞれの条件分岐ごとに別々のテストを行うべきです。if(firstFree == 0)あなたのケースで..ユニットテストの基本とそれがなぜそのように呼び出されたのか –

+0

@MaciejKowalskiそれが私の考えです。もう1つの質問は、テスト中にそれらの1つを無視すべきかどうかです。 – soommy12

答えて

7

名前として示される単体テストは、コードのテスト部分をテストするためのものです。スタックを空にすることはできず、同時に空にすることはできません。少数が示唆したように、次のように、あなたのテストケースを分離してください

public void isEmptyTest(){ 
    Stack emptyStack = new Stack(); 
    assertFalse(emptyStack.isEmpty()); 
} 

public void isEmptyTest(){ 
    Stack nonEmptyStack = new Stack(); 
    nonEmptyStack.push(1); 
    assertFalse(nonEmptyStack.isEmpty()); 
} 
私も

boolean isEmpty(){ 
    return (firstFree == 0); 
} 

希望をコードクリーナーを作るためにあなたのisEmpty()メソッドのための短い手を使って、より理解しやすい推薦

こと助けて!

+0

Ok、合法的です。テスト内のオブジェクトを初期化するのは良い方法ですか? – soommy12

+0

@Buszmanそれはテストのポイントです:あなたはあなたがテストを実行する必要がある**正確な**セットアップを行うことから始めます。他に、あなたのテストの準備をしたいですか?イムは – GhostCat

+0

@GhostCatは、thatsの。場合によっては、@ setup内でセットアップするフィールドをテストクラス内に持つだけで便利な場合もあります。時には、ここでの例のように、テストごとに特定のインスタンスを作成するだけです。それは単にテストが自己完結しているからです。設定方法@Buszman – soommy12

0
  1. 最初のケースでは、空のスタックオブジェクトを使用してisEmpty()メソッドをテストし、trueを返します。第二のケースについて

  2. 、falseを返すするのisEmpty()メソッドをテストするために、非空のスタック・オブジェクトを使用します。

+0

これは私がすでにこの質問を投稿する前に行ったことです。私は1つのテストでこの2つのことをしたいと思っていた可能性がある場合は好奇心があった – soommy12

+0

私はメソッドをテストしたい。 Stack空白をチェックしたい場合は、コード内でメソッド自体を使用します。O – soommy12