- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了一个类,并被要求为初始类中的添加、删除、包含和迭代器方法编写一个测试程序。到目前为止,我已经使用简单的打印语句编写了测试程序,但希望将其转换为 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/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!