如何为这个方法编写junit:

时间:2015-09-24 18:17:48

标签: java junit

public void declareWinner()
        {
         compare and declare winner 
            if(getLive_player1()==0 && getLive_player2()>0)
            {
                System.out.println("Player 2 wins with "+getLive_player2()+" cells alive.");
            }
            else if(getLive_player2()==0 && getLive_player1()>0)
            {
                System.out.println("Player 1 wins with "+getLive_player1()+" cells alive.");
            }
            else
            {
                System.out.println("There is a tie.");
            }
        }

1 个答案:

答案 0 :(得分:1)

嗯,很明显,您的代码中有一些不同的分支,因此您需要实现单元测试,您可以点击ifelse if语句:

  • player1 = 0player2 > 0
  • player1 = 0player1 > 0

以及您点击else声明的测试:

  • 显然有多个选项,但player1 > 0player2 > 0足以达到该分支。

这至少有三种不同的@Test方法。

我假设您的问题是确定如何捕获System.out来电。您可以将out流更改为指向可以通过编程方式捕获的内容的流。这是通过System.setOut()

实现的
@Test
public void testSomething() {
  ByteArrayOutputStream myOut = new ByteArrayOutputStream();
  System.setOut(new PrintStream(myOut));
  // do your setup and then execute declareWinner()...
  String methodOutput = myOut.toString();
  // Use Assert.assertEquals(...) to check methodOutput against expected value...
}

顺便说一下

根据我所看到的,你怎么知道两个分数> 0结束了?好像else语句似乎没有真正关闭所有选项。但话说回来,我不确定你的底层代码在做什么......