对于我的班级,我们正在创建ArrayStacks和LinkedStacks,而不是使用J-Unit进行测试。我们的测试之一是在clear()方法上。我们的教授特别要求我们清空堆栈中的每个元素,然后测试它们是否为null。我该怎么做呢?

public void clear() {
    // Checks if this stack is empty,
    // otherwise clears this stack.

    if(!isEmpty()){
        for(int i = 0; i < sizeIs(); i++){
            pop();
        }
        topIndex = -1;
    }
}


public class Test_clear {

/*
 * Class to test the clear method added to the Stack ADT of Lab04
 *
 *   tests clear on an empty stack
 *     a stack with one element
 *     a stack with many (but less than full) elements
 *     and a "full" ArrayStack (not applicable to Linked Stack - comment it out)
 */

    ArrayStack stk1, stk2;

@Before

public void setUp() throws Exception {
    stk1 = new ArrayStack();  stk2 = new ArrayStack();
}

@Test
public void test_clear_on_an_emptyStack() {

    stk1.clear();

    Assert.assertEquals(true, stk1.isEmpty());
}

@Test
public void test_clear_on_a_stack_with_1_element() {

    stk1.push(5);

    stk1.clear();

    Assert.assertEquals(true, stk1.isEmpty())'
}


等等。但是在isEmpty()上检查assertEquals不会测试数组中的元素是否已清除。提前致谢!

最佳答案

为了测试数组是否正确使对从堆栈中弹出的元素的引用无效,必须在测试过程中使用某种方法直接访问数组。

也许有一个包私有方法返回后备数组(的防御副本)?

09-27 20:10