Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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.lang.AssertionError:预期值:-1.0实际值:<;12.0>;_Java_Junit_Mockito - Fatal编程技术网

java.lang.AssertionError:预期值:-1.0实际值:<;12.0>;

java.lang.AssertionError:预期值:-1.0实际值:<;12.0>;,java,junit,mockito,Java,Junit,Mockito,我是Junit和Mockito的新手,我正在尝试测试下面的代码,但我遇到了异常 java.lang.AssertionError: 预期:-1.0 实际: 进程已完成,退出代码为-1 Triangle.java package com.zycsolego.Prism; public interface Triangle { double area(int s1, int s2, int s3) throws Exception; } Prism.java package com.

我是Junit和Mockito的新手,我正在尝试测试下面的代码,但我遇到了异常

java.lang.AssertionError: 预期:-1.0 实际:

进程已完成,退出代码为-1

Triangle.java

package com.zycsolego.Prism;

public interface Triangle {
    double area(int s1, int s2, int s3) throws Exception;
}

Prism.java

package com.zycsolego.Prism;

public class Prism {
    private int s1, s2, s3, height;
    private Triangle triangle;

    public Prism() {}
    public Prism(int s1, int s2, int s3, int height) {
        setPrism(s1, s2, s3, height);
    }

    public void setPrism(int s1, int s2, int s3, int height) {
        this.s1 = s1; this.s2 = s2; this.s3 = s3;
        this.height = height;
    }
    public void setTriangle(Triangle triangle) {
        this.triangle = triangle;
    }

    public double volume() {
        try {
            double area = triangle.area(s1, s2, s3);
            double volume = area * height;
            return volume;
        } catch (Exception e) {
            return -1.0;
        }
    }

}
java

package com.zycsolego.Prism;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.*;
import static org.mockito.AdditionalMatchers.*;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnitRunner.class)
public class PrismTest {
    private Prism prism;
    private Triangle triangle;

    @Test
    public void volumeTest01() throws Exception {
        int s1 = 1, s2 = 2, s3 = 3, height = 2;
        prism = new Prism(s1, s2, s3, height);
        triangle = mock(Triangle.class);

        when(triangle.area(s1, s2, s3)).thenReturn(6.0);

        double v = prism.volume();
        assertEquals(v, equalTo(-1.0));
    }

    @Test
    public void volumeTest02() throws Exception {

        int s1 = 1, s2 = 2, s3 = 3, height = 2;
        prism = new Prism(s1, s2, s3, height);
        triangle = mock(Triangle.class);

        when(triangle.area(s1, s2, s3)).thenThrow(new Exception());

        double v = prism.volume();
        assertEquals(v, lt(0.0));
    }
}

然后我得到以下错误。请帮我找到并修复错误。 对于
volumeTest01()

在测试中,您将prism的体积结果与-1进行比较

    double v = prism.volume();
    assertEquals(v, equalTo(-1.0)); 
体积按高度x三角形面积计算。

声明
when(三角形面积(s1、s2、s3)),然后返回(6.0)
告诉测试引擎在三角形模拟上执行
triangle.area()
计算时返回
6.0
作为结果

因此,您最终得到的是
v=6.0 x 2=12.0
,assertEquals实际上比较12等于-1

   ` assertEquals(v, equalTo(-1.0)); `
要通过测试,您可以改为
assertEquals(v,equalTo(12.0))


根据要测试的内容,您可以更改assertEquals方法的值。

您必须将模拟三角形对象注入棱镜中。在prism中添加一个接受三角形的构造函数参数,并通过调用prism=new prism(s1,s2,s3,height);。非常感谢!1.让您的断言正确(提示:检查javadoc中的assertEquals)2。您真的需要模拟三角形面积计算吗?这是一种简单的方法,我认为通过字段和接口间接解决问题是过度工程化的。
   ` assertEquals(v, equalTo(-1.0)); `