我需要测试这种方法 - compare()
。你能得到建议吗?我能做得更好(所有部分if,else-if,else)。
public class AbsFigure {
class AreaCompare implements Comparator<FigureGeneral> {
@Override
public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
double firstValue = oneFigure.area();
double secondValue = twoFigure.area();
int result = 0;
if (firstValue > secondValue)
result = 1;
else if (firstValue < secondValue)
result = -1;
else
result = 0;
return result;
}
}
在这个推荐之后 - 我们有下一张图片(非常感谢你们!):
public AreaCompare areaCompare = new AreaCompare();
@Test
public void testEqual() {
FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be equal", result == 0);
}
@Test
public void testGreaterThan() {
FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be greater than", result >= 1);
}
@Test
public void testLessThan() {
FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle");
FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be less than", result <= -1);
现在一切正常。
答案 0 :(得分:14)
只需实例化比较器类并传入对象:
public class Test extends TestCase {
class AreaCompare implements Comparator<FigureGeneral> {
@Override
public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
double firstValue = oneFigure.area();
double secondValue = twoFigure.area();
int result = 0;
if (firstValue > secondValue) {
result = 1;
} else if (firstValue < secondValue) {
result = -1;
} else {
result = 0;
}
return result;
}
}
private final AreaCompare areaCompare = new AreaCompare();
@Test
public void testEqual() {
FigureGeneral oneFigure = new FigureGeneral();
FigureGeneral twoFigure = new FigureGeneral();
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be equal", result == 0);
}
@Test
public void testGreaterThan() {
FigureGeneral oneFigure = new FigureGeneral();
FigureGeneral twoFigure = new FigureGeneral();
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be greater than", result >= 1);
}
@Test
public void testLessThan() {
FigureGeneral oneFigure = new FigureGeneral();
FigureGeneral twoFigure = new FigureGeneral();
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be less than", result <= -1);
}
}
答案 1 :(得分:1)
对我来说很好。也许摆脱result
class AreaCompare implements Comparator<FigureGeneral> {
@Override
public int compare(FigureGeneral oneFigure, FigureGeneral twoFigure) {
double firstValue = oneFigure.area();
double secondValue = twoFigure.area();
if (firstValue > secondValue)
return 1;
else if (firstValue < secondValue)
return -1;
return 0;
}
}
至少写下测试用例。每个返回值一个。
compare(a, b)
的标志应与compare(b, a)
或
compare(a, b) == compare(b, a) == 0
答案 2 :(得分:1)
我最近有类似的要求,并提出了一些辅助方法(尽管尚未发布为API)。这是源代码:
这是一个使用这些实用方法的测试:
答案 3 :(得分:0)
经过一些建议,好的测试:
public AreaCompare areaCompare = new AreaCompare();
@Test
public void testEqual() {
FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be equal", result == 0);
}
@Test
public void testGreaterThan() {
FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be greater than", result >= 1);
}
@Test
public void testLessThan() {
FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle");
FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle");
int result = areaCompare.compare(oneFigure, twoFigure);
assertTrue("expected to be less than", result <= -1);
}
答案 4 :(得分:0)
测试合同可能更好,而不是-1/0/1值(或更确切地说,任何正/零/负值)。这可以使用Hamcrest匹配器以非常简洁的方式完成。请考虑以下示例:
import static org.hamcrest.Matchers.comparesEqualTo;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.lessThan;
public AreaCompare areaCompare = new AreaCompare();
@Test
public void testEqual() {
FigureGeneral oneFigure = new Rectangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(2.0, 2.0, "rectangle");
assertThat(oneFigre comparesEqualTo(twoFigure));
assertThat(twoFigure, comparesEqualTo(oneFigure));
}
@Test
public void testGreaterThan() {
FigureGeneral oneFigure = new Triangle(2.0, 2.0, "triangle");
FigureGeneral twoFigure = new Rectangle(1.0, 1.0, "rectangle");
assertThat(oneFigure, greaterThan(twoFigure));
}
@Test
public void testLessThan() {
FigureGeneral oneFigure = new Rectangle(1.0, 1.0, "rectangle");
FigureGeneral twoFigure = new Triangle(2.0, 2.0, "triangle");
assertThat(oneFigure, lessThan(twoFigure));
}
因此,您不必记住哪个值代表什么,并且测试使意图明确。