Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使assertEquals方法中的预期对象成为姿势(在函数中,请参见下面的代码),而不是整数或双精度?_Java_Unit Testing - Fatal编程技术网

Java 如何使assertEquals方法中的预期对象成为姿势(在函数中,请参见下面的代码),而不是整数或双精度?

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);

我正试图为方法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);
        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;