2017-05-31 67 views
2

我目前正在学习如何实现JUnit测试,并且我正在为我的Stack实现而苦恼isEmpty()方法。这是我要测试的方法:JUnit测试isEmpty()堆栈方法

boolean isEmpty(){ 
    if(firstFree == 0) return true; 
    else return false; 
} 

这是我的测试:

public void isEmptyTest(){ 
    assertTrue(onpStack.isEmpty()); 
    assertFalse(onpStack.isEmpty()); 
} 

没有区别,如果堆栈已得到元素或不 - 的测试总是失败。我知道为什么:因为它不能在同一时间有元素。我无法弄清楚在这两种情况下如何使测试通过。有没有合适的方法?或者我应该为这个isEmpty()方法做两个不同的测试?

+0

是的,您应该为每个预期产出进行单独的单元测试。 –

+1

你应该有一个单独的测试每个条件分支..如果(firstFree == 0)在你的情况..这就是单元测试的基本原理和为什么他们被称为这样的方式 –

+0

@MaciejKowalski这就是我的想法。另一个问题是,在测试期间我应该忽略其中的一个吗? – soommy12

回答

7

单元测试顾名思义就是测试代码的测试部分。堆栈不能同时为空且不为空。由于几个建议的,请分离出你的测试用例如下

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); 
} 

。希望帮助!

+0

好吧,听起来合法。在测试中初始化对象是一个好方法? – soommy12

+0

@Buszman这是测试的要点:你首先要做的是准确的**设置,然后运行测试。你还想在哪里准备你的测试? – GhostCat

+0

@GhostCat我从教程中学习了如何设置在SetUp()方法中测试的变量,然后标记或简单地初始化类中的元素,这就是为什么我要求 – soommy12

0
  1. 对于第一种情况,使用空的堆栈对象来测试isEmpty()方法返回true。

  2. 对于第二种情况,使用非空栈对象来测试isEmpty()方法返回false。

+0

这就是我发布这个问题之前已经完成的工作。我想在一次测试中做出这两件事情,并且很好奇,如果这是可能的 – soommy12

+0

我想测试方法。如果你想检查堆栈空虚,我会在代码中使用方法本身:O – soommy12