gpt4 book ai didi

java - 如何将我的测试类转换为 JUnit 测试用例?

转载 作者:行者123 更新时间:2023-12-01 10:06:48 25 4
gpt4 key购买 nike

我得到了一个类,并被要求为初始类中的添加、删除、包含和迭代器方法编写一个测试程序。到目前为止,我已经使用简单的打印语句编写了测试程序,但希望将其转换为 JUnit 测试用例。我也在努力为迭代器编写测试方法。如何将目前为止所拥有的内容更改为 JUnit 测试用例格式并编写我的 testIterator 方法?

这是初始类:

import java.util.AbstractSet;
import java.util.Iterator;

public class BinarySearchTree<T> extends AbstractSet<T> {

private Node<T> root;
private int size;

private static class Node<T>
{
private T element;
private Node<T> left = null;
private Node<T> right = null;
private Node<T> parent;

private Node(T element, Node<T> parent)
{
this.element = element;
this.parent = parent;
}
}

public BinarySearchTree()
{
root = null;
size = 0;
}

public BinarySearchTree(BinarySearchTree<T> other)
{
root = null;
size = 0;
for (T element: other)
add(element);
}

public int size()
{
return size;
}

public Iterator<T> iterator()
{
return new TreeIterator();
}




public boolean add(T element)
{
if (root == null) {
root = new Node<T>(element, null);
size++;
return true;
} else {
Node temp = root;
int comp;
while (true) {
comp = ((Comparable)(element)).compareTo(temp.element);
if (comp == 0)
return false;
if (comp<0) {
if (temp.left != null)
temp = temp.left;
else {
temp.left = new Node<T>(element, temp);
size++;
return true;
}
} else {
if (temp.right != null)
temp = temp.right;
else {
temp.right = new Node<T>(element, temp);
size++;
return true;
}
}
}
}
}

public boolean remove(Object obj)
{
Node<T> e = getNode(obj);
if (e == null)
return false;
deleteNode(e);
return true;
}

private Node<T> getNode(Object obj)
{
int comp;
Node<T> e = root;
while (e != null) {
comp = ((Comparable)(obj)).compareTo(e.element);
if (comp == 0)
return e;
else if (comp < 0)
e = e.left;
else
e = e.right;
}
return null;
}

public T mapAdd(T obj)
{
if (root == null) {
root = new Node<T>(obj, null);
size++;
return root.element;
}
int comp;
Node<T> e = root;
Node<T> p = null;
boolean left = true;
while (e != null) {
p = e;
comp = ((Comparable)(obj)).compareTo(e.element);
if (comp == 0)
return e.element;
else if (comp < 0) {
left = true;
e = e.left;
} else {
e = e.right;
left = false;
}
}
e = new Node<T>(obj, p);
if (left)
p.left = e;
else
p.right = e;
size++;
return e.element;
}




public boolean contains(Object obj)
{
return getNode(obj) != null;
}

private Node<T> deleteNode(Node<T> p)
{
size--;
if (p.left != null && p.right != null) {
Node<T> s = successor(p);
p.element = s.element;
p = s;
}

Node<T> replacement;
if (p.left != null)
replacement = p.left;
else
replacement = p.right;

if (replacement != null) {
replacement.parent = p.parent;
if (p.parent == null)
root = replacement;
else if (p == p.parent.left)
p.parent.left = replacement;
else
p.parent.right = replacement;
} else if (p.parent == null) {
root = null;
} else {
if (p == p.parent.left)
p.parent.left = null;
else
p.parent.right = null;
}
return p;
}

private Node<T> successor(Node<T> e)
{
if (e == null) {
return null;
} else if (e.right != null) {
Node<T> p = e.right;
while (p.left != null)
p = p.left;
return p;
} else {
Node<T> p = e.parent;
Node<T> child = e;
while (p != null && child == p.right) {
child = p;
p = p.parent;
}
return p;
}
}

private class TreeIterator implements Iterator<T>
{
private Node<T> lastReturned = null;
private Node<T> next;

private TreeIterator()
{
next = root;
if (next != null)
while (next.left != null)
next = next.left;
}

public boolean hasNext()
{
return next != null;
}

public T next()
{
if (next == null)
throw new NoSuchElementException();
lastReturned = next;
next = successor(next);
return lastReturned.element;
}

public void remove()
{
if (lastReturned == null)
throw new IllegalStateException();
if (lastReturned.left != null && lastReturned.right != null)
next = lastReturned;
deleteNode(lastReturned);
lastReturned = null;
}
}

}

这是我的测试程序:

import static org.junit.Assert.*;

import org.junit.Test;

public class TestTree {

private void testAdd() {

BinarySearchTree bst = new BinarySearchTree();

bst.add(5);

if (bst.contains(5)) {

System.out.println("testAdd Failure");

} else {

System.out.println("testAdd Success");

}

}

public void testRemove() {

BinarySearchTree bst = new BinarySearchTree();

for (int i=0; i < 5; i++) {
bst.add(i);
}

bst.remove(3);

if (bst.contains(3)) {

System.out.println("testRemove Failure");

} else {

System.out.println("testAdd Success");

}

}

public void testContains() {

BinarySearchTree bst = new BinarySearchTree();

for (int i=0; i < 5; i++) {
bst.add(i);
}

bst.add(11);

if (bst.contains(1) && bst.contains(2) && bst.contains(3) && bst.contains(4) && bst.contains(5) &&
bst.contains(11)) {

System.out.println("testContains Success");

} else {

System.out.println("testContains Failure");

}

}

public void testIterator() {

BinarySearchTree bst = new BinarySearchTree();

for (int i=0; i < 10; i++) {

bst.add(i);

}

bst.iterator();

}

}

感谢您抽出时间,希望我说得有道理。

最佳答案

下面是一个示例,说明如果您使用 junit 及其断言方法,那么您的 restRemove 会是什么样子。

在每个测试方法前添加@Test。

@Test
public void testRemove() {

BinarySearchTree bst = new BinarySearchTree();

for (int i=0; i < 5; i++) {
bst.add(i);
}
int elementThree = bst.get(3);
bst.remove(3);

assertFalse(bst.contains(elementThree));



}

关于java - 如何将我的测试类转换为 JUnit 测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com