Java 如何使assertEquals方法中的预期对象成为姿势(在函数中,请参见下面的代码),而不是整数或双精度?
我正试图为方法translatePose编写一个单元测试(代码如下) 我写了一个快速模板,看起来像:Java 如何使assertEquals方法中的预期对象成为姿势(在函数中,请参见下面的代码),而不是整数或双精度?,java,unit-testing,Java,Unit Testing,我正试图为方法translatePose编写一个单元测试(代码如下) 我写了一个快速模板,看起来像: public class TrcPose2DTest { @Test public void testTranslatePose() { assertEquals(0.0, new TrcPose2D(0,0)); assertEquals(4.46, new TrcPose2D(4,2).translatePose(4,2).x, 1e-9);
public class TrcPose2DTest {
@Test
public void testTranslatePose() {
assertEquals(0.0, new TrcPose2D(0,0));
assertEquals(4.46, new TrcPose2D(4,2).translatePose(4,2).x, 1e-9);
assertEquals(3.58, new TrcPose2D(4,2).translatePose(4,2).y, 1e-9);
问题是assertEquals试图将double与translatePose方法生成的姿势进行比较。但是,我不确定如何将预期值设置为姿势,就像实际值一样。我曾考虑过创建一个名为TrcPose2DResult的变量,并将其设置为一个姿势,但我不确定具体如何实现此操作。问题似乎在于您的第一个断言:
assertEquals(0.0, new TrcPose2D(0,0));
当您将双精度0.0与该断言中的TrcPose2D对象进行比较时
我将检查该TrcPose2D对象的x和y值,就像您在另外两个断言中所做的那样,这两个断言也是一个双值:
assertEquals(0.0, new TrcPose2D(0,0).x, 1e-9);
assertEquals(0.0, new TrcPose2D(0,0).y, 1e-9);
让另外两个断言保持不变,以测试
translatePose
方法。在看到assertEquals中的值后,我假设translatePose(4,2)
返回一个TrcPose2D
,其中x=4.46
和y=3.58
。这相当于创建如下对象:newtrcpose2d(4.46,3.58)
。现在要测试实际对象,您必须首先覆盖TrcPose2D
中的equals()
方法,用于x
和y
属性:
public class TrcPose2D {
public double x;
public double y;
//constructor
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TrcPose2D trcPose2D = (TrcPose2D) o;
return Double.compare(trcPose2D.x, x) == 0 &&
Double.compare(trcPose2D.y, y) == 0;
}
}
现在,equals方法已被重写,我们可以这样编写测试:
public void testTranslatePose() {
TrcPose2D expectedResult = new TrcPose2D(4.46, 3.58);
TrcPose2D poseBeforeTranslate = new TrcPose2D(4, 2);
TrcPose2D actualResult = poseBeforeTranslate.translatePose(4, 2);
assertEquals(expectedResult, actualResult);
}
EDIT:我们需要重写equals()方法,因为assertEquals()
幕后正在执行以下操作:
if (expectedResult == actualResult)
return true;
return false;
当我们用
=
比较两个对象时,调用.equals(objecto)
方法。在我们的例子中,为了正确地比较我们的两个姿势,我们需要检查当前的x
值是否等于o.x
值,以及y
值是否相同。您清楚地知道如何实例化TrcPose2D,所以我不清楚问题是什么。
if (expectedResult == actualResult)
return true;
return false;