2017-03-05 51 views
0

我一直在试图建立一个不可变的二叉搜索树数据结构。现在我已经在开发中得到了很多,我试图测试我创建的方法。到目前为止它进展顺利。j-unit testing不可变的二进制搜索树添加方法

我add方法,因为它代表:

@Override 
public Set<T> add(T t) { 
    if (t.compareTo(x) == 0) { 
     return new Add<T>(x, left, right); 
    } else { 
     if (t.compareTo(x) < 0) { 
      return new Add<T>(x, left.add(t), right); 
     } else { 
      return new Add<T>(x, left, right.add(t)); 
     } 
    } 
} 

我认为这是导致该问题的的toString:

@Override 
public String toString(){ 
    return ""; 
} 

和单元测试:

@Test 
public void SetAddElements(){ 
    activeSet = newSet.add(1); 
    assertEquals("The element(s) were not added!", 1 , activeSet.add(1)); 
} 

然而,我.add()方法似乎失败我的单元测试。从我推导出的Empty类的toString方法返回的空白意味着代替我的单元测试返回的结果(预期:< 1>,)它返回(预期:< 1>,实际:< 1>)。微小的差异,但足以让测试失败。

junit test results and error report

我试图删除toString方法,但显然这只是返回默认的toString和attemoted使用API​​研究等,但什么也没有了上来。我正在努力用这个问题的精确表达来解释这个问题。任何帮助将不胜感激。

+0

你应该实现使用默认TObject.toString +例如自己的类功能的toString功能,如果它像数组 –

回答

0

部分activeSet.add(1)返回Set。然而,在这一行中:

assertEquals("The element(s) were not added!", 1 , activeSet.add(1)); 

您将它与数字1进行比较。这不匹配,因为这些类型不兼容。

也许你打算从add结果中拿出toString

activeSet.add(1).toString() 

...然后将它与另一个字符串进行比较?

assertEquals("The element(s) were not added!", "1", activeSet.add(1).toString()); 
+1

一个集合类,这是我所想象的。但是,当我尝试这个测试返回相同的错误语句:java.lang.AssertionError:元素(s)没有被添加!预计:<1>但是:<1 > \t at org.junit.Assert.fail(Assert.java:88) – p1520

+1

我想念你写的东西。我没有考虑到我检查的价值需要用“”来设置。它适合一种享受!非常感谢! – p1520

+1

是的,在JUnit的输出消息中读取有点难,因为在这种情况下你看不到它们是不同的类型。 – john16384