2017-10-19 11 views
-1

私はティックタックトーボードのためにいくつかのジュニットテストをしようとしています。私は一度に1つの関数をテストする方法を知っていますが、私の問題は、いくつかの関数をチェックするために、以前の関数を呼び出さなければならないということです。JUnit一度に複数の関数をテストする

たとえば、勝者を確認するには、関数 "PlaceMarker"を複数回呼び出す必要があります。私がしている特定の1つは、チェックの場所に既にマーカーがある場合、bool関数 "CheckSpace"がfalseを返すかどうかをチェックすることです。私は現在持っています

public class TestGame { 

private GameBoard board; 

@Before 
public void setUp() {board = new GameBoard();} 

@After 
public void tearDown() {board = null;} 

@Test 
public void testRewritingOverSpace() { 
    assertEquals("Placing (1, 1), then checking space (1, 1)", false, 
    board.placeMarker(new BoardPosition(1, 1, 'X')), 
    board.checkSpace(new BoardPosition(1, 1, 'O')); 

これは私にエラーを与えています。要するに、複数の関数を呼び出す必要があるJUnitのテストケースをどうやって作るのですか?

+1

「これはエラーです。」エラーが何であるかを知らなくても、あなたを助けることは非常に難しいです。あなたがここで期待している主張が正直であるかどうかは明らかではありません。おそらく、あなたは 'board.placeMarker(...)'と 'assertEquals(false、board.checkSpace(...))'を呼びたいでしょうか? falseを返すという点でテストしている 'checkSpace'メソッドですか? –

+1

表示されているエラーと、使用しているJUnitのバージョンに関する詳細を入力してください。 –

+0

デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[mcve]を作成する方法。あなたの*質問を改善するために "編集"リンクを使用してください - コメントでより多くの情報を追加しないでください。ありがとう! – GhostCat

答えて

1

質問に答えるには、段階的に進みます。特に、あなたがTDDを考えるとき、あなたはこのように動作します:

  • あなたはあなたの製品コード
  • の非常に最初の「機能」のための最初のテストを作成するには、別のテストを書く
  • その機能を実装します...

    @Test 
    public void testFirstFeature() { 
        ... one line of setup 
        ... invoke method on object under test 
        ... assert something 
    } ... 
    
    @Test 
    public void testMoreAdvancedFeature() { 
        ... multiple 
        ... lines 
        ...  of setup 
    
        ... invoke method on object under test 
        ... assert something 
    } 
    

    とよ:そして、あなたのコードは次のように見えることを意味する可能性があり

とはいを実装あなたの後のテストケースが実際にテスト/ベリファイベリファイがすでに行われていることがわかります。それでは戻って自分自身に尋ねることができます: "には、これまでのテストをのままにするメリットがありますか、それとも安全に捨てることができますか?"

あなたは正しいです、ここでバランスが必要です:同じ/同様のことを行う複数のテストを持つことは "重複"につながります。一方、テストが多いほど、ここで小さなものを簡単に変更できるようになり、すぐにフィードバックを受け取ることができます。

したがって、これには一つの答えはありません。それは、文脈と技術的判断に関するものです。

関連する問題