我正在尝试通过我的j单元测试我的代码将复杂的数字加在一起,但我一直在失败。我不确定为什么会这样。
添加代码
// Adds one Complex Number with another
public ComplexNumber add(ComplexNumber a) {
MyDouble realNum = this.real.add(a.real);
MyDouble imagNum = this.imag.add(a.imag);
return new ComplexNumber(realNum, imagNum);
}
.add来自另一个类MyDouble,它在其中添加了两个双打。
JUnit代码
@Test
public void testAdd() {
MyDouble a = new MyDouble(1.5), b = new MyDouble(2.0);
MyDouble c = new MyDouble(2.5), d = new MyDouble(3.0);
MyDouble realNum = a.add(c);
MyDouble imagNum = b.add(d);
ComplexNumber x = new ComplexNumber(a,b);
ComplexNumber y = new ComplexNumber(c,d);
assertTrue(new ComplexNumber(realNum, imagNum) == y.add(x) );
}
答案 0 :(得分:2)
此测试未通过,因为比较是通过引用而不是通过值进行的:
assertTrue(new ComplexNumber(realNum, imagNum) == y.add(x));
new ComplexNumber(args)
创建一个新的对象实例,而y.add(x)
返回另一个对象实例。断言失败,因为它们的引用不相同,即使这些对象中包含的值可能相等。
在Java中,与" =="进行比较当一个人开始编码时经常会感到困惑。
要解决此测试用例的问题,您应该尝试
assertEquals(new ComplexNumber(realNum, imagNum), y.add(x));
如果ComplexNumber
实施equals
方法(如有必要,请检查实施它的资源,它们是军团)。