JUnit一次测试多个函数

时间:2017-10-19 15:20:39

标签: java unit-testing testing junit

我正在尝试对tic tac toe board进行一些Junit测试。我知道如何一次测试一个函数,但我的问题是,为了检查一些函数,必须调用以前的函数。

例如,为了检查获胜者,您必须多次调用函数“PlaceMarker”函数。我正在检查的具体问题是确保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 个答案:

答案 0 :(得分:1)

回答这个问题:你一步一步走。特别是当您考虑TDD时,您的工作方式如下:

  • 您为生产代码的第一个“功能”创建了第一个测试
  • 您实施该功能
  • 你写了另一个测试......并实现

是的,这可能意味着您的代码如下:

var node = g.selectAll(".node")
      .data(root.descendants())
    .enter().append("g")
      .attr("class", function(d) { return "node" + (d.children ? " node--internal" : " node--leaf"); })
      .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; })
      //attach a click listener to the group
      .on("click", function(d){
        var children = [];
        //recursively call parent
        var recurse = function(c){
          //recurse unless no parent is found
          if (c.parent){
            children.push(c.parent.id);
            recurse(c.parent)
          }
        }
        recurse(d)//call recurse on clicked node
        console.log(children)
        //send children to server via AJAX
      })

您可能会发现您之后的测试用例实际上是测试 / 验证行为,这些行为已经在您之前编写的测试中涵盖过。然后你可以退一步问自己:“保留这个早期的测试是否有一些优点 - 或者我可以安全地将它们丢弃吗?”

你是对的,这里需要平衡:进行多次相同/类似事情的测试会导致“重复”。另一方面 - 您拥有的测试越多,您就越容易在这里和那里更换小东西 - 然后立即收到反馈。

因此:对此没有单一答案。这完全取决于背景和工程判断。