java.lang.AssertionError:预期值:-1.0实际值:<;12.0>;
我是Junit和Mockito的新手,我正在尝试测试下面的代码,但我遇到了异常 java.lang.AssertionError: 预期:-1.0 实际: 进程已完成,退出代码为-1 Triangle.javajava.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.
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)); `