TestNG的。如何正确处理此异常

时间:2017-10-11 23:21:58

标签: java testing testng

我有计算所有边都已知的三角形角度的方法:

public static double[] calculateTriangleAngles(double a, double b, double c) {
    if (a <= 0 || b <= 0 || c <= 0 || a >= b + c || b >= a + c || c >= a + b) {
        throw new TriangleTechnicalException("Incorrect side value");
    }
    double[] angles = new double[3];
    angles[0] = round(Math.toDegrees(Math.acos((pow(b, 2) + pow(c, 2) - pow(a, 2)) / (2 * b * c))), 2);
    angles[1] = round(Math.toDegrees(Math.acos((pow(a, 2) + pow(c, 2) - pow(b, 2)) / (2 * a * c))), 2);
    angles[2] = round(Math.toDegrees(Math.acos((pow(a, 2) + pow(b, 2) - pow(c, 2)) / (2 * a * b))), 2);
    return angles;
}

计算算法是正确的。关于例外的问题。它必须扔在这里。

如何正确处理此异常(在这里或其他地方使用throwstry / catch?)?或者可能更好地抛出它(但是这种方法看起来不正确,在测试中包围try / catch)?

@Test
public void testCalculateTriangleAnglesTrue() {
    double[] expResult = {48.19, 58.41, 73.4};
    double[] result = new double[3];
    try {
        result = TriangleFunctional.calculateTriangleAngles(7, 8, 9);
    } catch (TriangleTechnicalException e) {
        fail();
    }
    assertTrue(Arrays.equals(expResult, result));
}

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您需要在方法声明中添加throws。

public static double[] calculateTriangleAngles(double a, double b, double c) throws TriangleTechnicalException {

然后,无论何时使用此方法,您都需要在try块内执行此操作,或者让该方法也抛出TriangleTechnicalException

答案 1 :(得分:1)

我的建议是宣布calculateTriangleAngles抛出TriangleTechnicalException,即将第一行改为

public static double[] calculateTriangleAngles(double a, double b, double c) 
    throws TriangleTechnicalException {

以便通知来电者有问题。我相信,这比处理方法中的错误并返回某种特殊值或(甚至更糟)一个假定值来解决错误或类似值的值要好得多。

如果我没记错的话,如果TriangleTechnicalExceptionRuntimeException的子类,那么调用者就不必捕获异常;如果发生异常,它将冒泡直到某个调用者捕获它,或者它到达顶层并且程序终止。因此测试用例无需捕获异常。但是你肯定想测试错误处理代码,在这种情况下你需要捕获异常,以验证错误处理是否按预期工作。