2016-09-09 4 views
1

リストを受け取って文字列を返す関数の中で呼び出すためのモックを実行します。私はいくつかのWebに従ってみましたが、私の場合にどのようにコードを適合させるのかは分かりません。私はモックには、このコードを持っている:リストを受け取って文字列を返す呼び出しの模擬メッセージ

public class Procesa { 
public String preparaComando (List <String> comando){ 
     Prepara prepara = new Prepara(); 
     List <String> comandoCodificado = new ArrayList<String>(); 
     comandoCodificado = prepara.preparaTexto(comando); 

     String textoRetorno = ""; 
     for (String cadena : comando) 
      textoRetorno+= cadena + " "; 

     return textoRetorno; 
    } 
.... 
} 

をそして私は、このテストを行う試してみました:

@RunWith(MockitoJUnitRunner.class) 
public class ProcesaTest { 

    @Mock 
    Procesa procesa = mock(Procesa.class); 
    @Mock 
    Prepara preparaCom = mock(Prepara.class); 
.... 
    @Test 
    public void TestPreparaComando() { 
     List lista = new ArrayList<>(); 
     lista.add("encenderluzcocina"); 

     verify(procesa).preparaComando(anyList()).contains("encender"); 
     assertEquals("encenderluzcocina", procesa.preparaComando(anyList())); 

    } 
} 

どのように私はこの機能をテストすることができますか?

+1

サイドノート:このサイトの主要言語は英語です。だから、イタリア語のコードをポストするのではなく、スペイン語? **英語**の用語を使用して問題を示す**最小限の**例を用意してください。それは単に役に立つ回答を受け取る可能性を高めます。 – GhostCat

+0

ちょうど不思議なこと:質問をしてから1ヶ月後の受諾を取り消すポイントは何ですか?**別の**答えを受け入れませんか?他の新しい回答を受け取る可能性は、0に非常に近いです。 – GhostCat

答えて

1

を使用してそのようなコードをテストしてください。あなたのメソッドは文字列のリストを受け取ります。文字列を返します。それはすべて重要なことです。

つまり、あなたのメソッドは一定の契約を持っています。入力Xを指定すると出力Yを出力するはずです。そのメソッドはXからYにどのように変換されるのですか?実装の詳細になります。また、ではなく、のテスト実装の詳細を行います。

つまり、答えは、元に戻って、意味のある入力値{X1、X2、...、Xn}の完全な集合を求めることです。次に、どの出力値{Y1、Y2、... Yn}が各入力に対応するかを決定します。今度はn回のテストを書く。各対Xi、Yiに対して1つ。

[ヒント:特定の例外がスローされると予想するには有効な "Yi"でもかまいません。値が返されるのではなく]

ロングストーリーショーツ:あなたのメソッドが素晴らしい入出力設定を持っている場合。 アサートを使用してテストする必要があります。テスト中のクラス内の他ののものを変更してメソッドが機能する場合は、その状態を検査できるゲッタを追加することを検討してください。

そして嘲笑が必要な場合は、テスト対象のクラスに "模擬された"塊を提供するために、依存性注入を使用する必要があります。

最後に、テスト可能なコードの書き方を学ぶ場合は、videosをご覧ください!

+1

ありがとうございます!私は私の問題を解決し、私はテストのプロセスについてもっと学んだ。あなたは私に素晴らしい反応を提供してくれました、ありがとうございます! – benpay

+1

あなたは大歓迎です。常に喜んで助けてください。このような素敵なフィードバックは長い週の良い完了です! – GhostCat

+1

この回答は、*ブラックボックス*テストが可能で実行可能であることを前提としています。確かにそれが事実なら、私は完全にそれがどんな嘲笑もせずにそのように書かれるべきだということに同意するでしょう。しかし、もし 'Prepara'依存関係が(例えば、リモートWebサービスを呼び出すなどの)方法で取得された場合、この依存関係が存在する*ホワイトボックス*テストを書くことも有効です嘲笑された。 –

1

Prepara依存関係が偽装されている、いわゆるホワイトボックステスト(「単体ユニットテスト」とも呼ばれます)を書くこともできます。

は、たとえば、次のテストは、(他の人が同様に使用することができる、ここでJMockitあざけるライブラリを使用して)記述できます。

public class ProcesaTest 
{ 
    @Tested Procesa procesa; 
    @Mocked Prepara preparaCom; 

    @Test 
    public void preparaComando() { 
     final List<String> comando = asList("a", "b", "c"); 

     new Expectations() {{ 
      preparaCom.preparaTexto(comando); returns("encender", "luzcocina"); 
     }}; 

     String result = procesa.preparaComando(comando); 

     assertEquals("encender luzcocina", result); 
    } 
} 

これは言った、しかし、ブラックボックステストは、ほとんど常により良いですホワイトボックステスト。

関連する問題