Java isEmpty()堆栈方法的JUnit测试

Java isEmpty()堆栈方法的JUnit测试,java,junit,Java,Junit,我目前正在学习如何实现JUnit测试,我正在努力使用isEmpty()方法来实现我的堆栈。这是我要测试的方法: boolean isEmpty(){ if(firstFree == 0) return true; else return false; } 这是我的测试: public void isEmptyTest(){ assertTrue(onpStack.isEmpty()); assertFalse(onpStack.isEmpty()); } 堆栈

我目前正在学习如何实现JUnit测试,我正在努力使用isEmpty()方法来实现我的堆栈。这是我要测试的方法:

boolean isEmpty(){
    if(firstFree == 0) return true;
    else return false;
}
这是我的测试:

public void isEmptyTest(){
    assertTrue(onpStack.isEmpty());
    assertFalse(onpStack.isEmpty());
}
堆栈是否有元素没有区别——测试总是失败。我知道原因:因为它不能同时拥有和不拥有元素。我不知道如何在这两种情况下都通过测试。有合适的方法吗?或者我应该为这个isEmpty()方法做两个不同的测试吗

  • 对于第一种情况,使用空堆栈对象测试isEmpty()方法以返回true

  • 对于第二种情况,使用非空堆栈对象测试isEmpty()方法以返回false


  • 顾名思义,单元测试旨在测试代码的各个部分。堆栈不能同时为空和非空。正如少数人所建议的,请按如下方式分开您的测试用例

    public void isEmptyTest(){
      Stack emptyStack = new Stack();
      assertFalse(emptyStack.isEmpty());
    }
    
    public void isEmptyTest(){
      Stack nonEmptyStack = new Stack();
      nonEmptyStack.push(1);
      assertFalse(nonEmptyStack.isEmpty());
    }
    
    我还建议您对isEmpty()方法使用速记,以使代码更清晰、更易于理解

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

    希望有帮助

    是的,您应该为每个预期输出进行单独的单元测试。您应该为每个条件分支进行单独的测试。。如果(firstFree==0)在您的情况下。。这是单元测试的基础,也是它们被称为单元测试的原因way@MaciejKowalski我就是这么想的。另一个问题是我应该在测试期间忽略其中一个吗?在第二个资产之前向堆栈中添加一个元素不要忽略任何情况。。只是不要在一个测试中放置多个逻辑路径,这是我在发布这个问题之前已经做过的。我想在一次测试中做到这两件事,我想知道这是否可能,我想测试一下这个方法。如果您想检查堆栈的空性,我会在代码中使用方法本身:OOk,听起来合法。初始化测试中的对象是一个好方法?@Buszman这就是测试的重点:您首先要做您需要的精确设置,然后运行测试。你还想在哪里准备考试@巴斯曼两人都能工作。有时,在测试类中设置一个字段非常有用,您可以在@setup中设置该字段。有时,就像这里的好例子一样,您只需为每个测试创建一个特定实例。只是因为这使测试变得独立。@Buszman a安装方法在这样简单的情况下通常是多余的,但如果你的安装更复杂,那就太好了。@Buszman a)整个想法是你有X.java和XTest.java;其中XTest将包含X的所有测试(当这对您不起作用时,您在某个地方犯了一个错误)。B) 我们不应该进入更多问题的评论游戏-当你有一个新问题,写一个新问题。但特别是在这里:考虑做更多的研究。你询问的大多数事情都应该在很多地方记录下来。C) 关于更多的问题。。。如果您想进一步表达我的评论的帮助性,请随意将我的部分内容上传到其他地方;-)