Java编程的新手,我只是想了解如何让这个类进行测试。我做了一个队列课程:
public class Queue<E> {
private ArrayList<E> items;
public Queue(){
items = new ArrayList<E>();
}
public void join(E e) {
items.add(e);
}
public E leave() throws EmptyQueueError {
if (items.isEmpty()) {
throw new EmptyQueueError();
}
return items.remove(0);
}
}
我想创建一个名为QueueTest的JUnit,它会在每个开始的测试之前自动重置为空?然后我想检查从空队列中删除项目会引发EmptyQueueError吗?最后,我希望它检查当几个项目加入(最初)空队列时,它是第一个加入的项目,它是第一个离开的项目?
这是我正在关注的教程,但它无法让我理解。我已经完成了上面的课程,并尝试了JTest课程:
package queue;
public class QueueTest<e> {
private Queue q;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void test() {
q = new Queue<e>();
assertEquals("Empty Queue", 0, q);
}
}
我接近我想要实现的目标吗?我正在尝试做第一个。
感谢您的帮助和充足的时间。
答案 0 :(得分:1)
你做得很好。
@Test
public void test() {
q = new Queue<e>();
assertEquals("Empty Queue", 0, q);
}
这个问题是你创建了一个新的Queue实例,但你没有对它做任何事情。
然后你的测试的内脏可能是
@Test
public void test() {
Queue<Integer> q = new Queue<Integer>(); // A
try {
Integer ignore = q.leave(); // B
fail("exception expected"); // C
} catch (EmptyQueueError ex) {
// implicit success // D
}
}
这意味着您要创建一个队列('A'),然后立即尝试获取一个项目('B')。这应该会导致异常。如果没有,则您的测试将失败并显示“异常预期”('C')。如果抛出预期的异常,则代码工作('D')
一旦你开始工作,我会发布更多信息。
答案 1 :(得分:0)
试试这个:他们为我而战。你离我不远。
package cruft;
import java.util.ArrayList;
public class Queue<E> {
private ArrayList<E> items;
public Queue(){
items = new ArrayList<E>();
}
public void join(E e) {
items.add(e);
}
public E leave() throws EmptyQueueError {
if (items.isEmpty()) {
throw new EmptyQueueError();
}
return items.remove(0);
}
// Note: I added this.
public int size() { return this.items.size(); }
}
}
这是测试:
package cruft;
import org.junit.Assert;
import org.junit.Test;
public class QueueTest {
@Test
public void test() {
Queue<String> q = new Queue<String>();
Assert.assertEquals("queue should be empty", 0, q.size());
}
}
注意:您应该只在测试中创建一个实例。确保您的队列具有要保留的具体类型(在本例中为String)。
记住泛型为您做了什么:它们允许您创建一个集合或容器,其行为不依赖于它所持有的对象类型。所以你可能有一个包含字符串或人或企鹅的队列。
答案 2 :(得分:0)
那么你想在这里测试什么?当你assertEquals("Empty Queue", 0, q)
做什么试图在这里测试?队列是空的?
对于asserts
他们通常采取的是要测试的东西,IE Q == 0,他们会选择一条可选的消息,如果测试失败,将会打印出来。
通过调查assertEquals
的价值,您可以看到q
失败的原因。
答案 3 :(得分:0)
以下是使用TestNG的方法,介绍如何测试异常以及如何在每个测试方法之前重置队列:
public class QueueTest {
private Queue q = new Queue();
@BeforeMethod
public void setUp() throws Exception {
q.reset();
}
@Test(expectedExceptions = EmptyQueueError.class)
public void shouldThrowIfRemovingFromEmpty() {
assertTrue(q.isEmpty());
q.remove(0);
}
}
如果你想要非常严格,你应该测试每个队列最初是空的,并且在两个单独的测试方法中测试异常。