如果junit测试失败,是否可以打印字段值?

时间:2015-09-12 09:07:34

标签: java unit-testing junit

我刚刚开始使用junit / unit测试工具。现在我感觉它有什么好处:)如果junit测试失败,是否可以打印字段值?

我的方法尝试实现INT(A(D - B)^ C):

public static int countFieldEventPoints(PointsCountingTableRow row,float centimetres){
    float temp = row.getA()*(float)Math.pow((centimetres - row.getB()),row.getC());
    return roundUP(temp);
}

我的测试:

public void testCountlongJumpEventPoints(){
    PointsCountingTableRow row = Tables.get2001table().getLongJump();
    float cm = 736f;
    assertEquals(900,PointCounterService.countFieldEventPoints(row,cm));
}

控制台打印:

java.lang.AssertionError: 
Expected :900
Actual   :901

向上舍入方法(我觉得有问题):

private static int roundUP(double floatNumber){
    return (int) Math.round(floatNumber + .5);
}

行类:

public class PointsCountingTableRow {
private float A;
private float B;
private float C;


public PointsCountingTableRow(float a, float b, float c) {
    A = a;
    B = b;
    C = c;
}

public float getA() {
    return A;
}

public float getB() {
    return B;
}

public float getC() {
    return C;
}

}

2 个答案:

答案 0 :(得分:3)

欢迎来到单元测试的精彩世界:)为了代码覆盖,为API中的每个公共方法编写一组测试方法是一个很好的做法:每个有趣的案例都有一个,包括成功和失败的测试(感谢Florian Schaetz)。

然后用私有方法(roundUP)做什么?他们还应该得到一个测试电池,您可以在简单地重构API之后轻松设计它:

  • 使用包(默认)访问和私有构造函数创建一个新的“帮助器”类。这个类只包含公共静态方法。
  • roundUP从其实际容器类移至辅助类,并将其公开。
  • 在同一个包中创建一个公共测试器类 (从而授予它对辅助类的访问权限),并使用必要的测试方法对其进行全面填充。

回到你的案例,你可以编写几种测试方法来正确地标记roundUP:我建议使用十种方法:roundUP(0.0)roundUP(0.1)roundUP(0.2) ... {{ 1}}。

作为测试驱动开发的一部分,每次报告程序中出现新错误时,您必须编写新的测试方法代码以重现此类错误。然后,修复错误,直到所有测试人员都工作正常(新的和现有的):这样测试电池增长并确保没有更新或修复会意外破坏现有行为。

如果测试失败,是否可以打印行字段值?

科西嘉。您可以通过以下方式对测试方法进行编程以便在发生故障时做出反应:

roundUP(0.9)

或者也可以通过@Test public void myTest() { // Prepare the input parameters: PointsCountingTableRow row=... float centimetres=... // Perform the test: int result=countFieldEventPoints(row, centimeters); // Check the results: String messageInCaseOfFail="row="+row.toString(); assertEquals(messageInCaseOfFail, expectedResult, result); } methd:

fail

答案 1 :(得分:0)

  

如果测试失败,是否可以打印字段值?

当然是。但是,我不建议这样做。相反,如果单元测试失败,并且您无法通过查看代码看到它发生的原因,那么我建议您执行以下操作:

  • 在IDE的调试器中运行失败的测试,
  • 在适当的位置设置断点,
  • 使用调试器UI直接检查对象和变量的状态。

在特别复杂的情况下,我只在单元测试套件中实现诊断(例如显示)代码。

将诊断代码添加到单元测试只会增加需要读取和维护的代码量。此外,只需要一个失败的测试......这就是你想要消除的场景。