(j)单元测试断言和错误消息?

时间:2015-11-12 20:47:44

标签: java unit-testing junit assert

我目前正在测试一种方法,我称之为testedMethod()

方法的主体看起来像这样

private testedMethod(List<Protocoll> protocolList) {
    //so something with the protocolList
    if (something) && (somethingElse) {
        Assert.isFalse(areTheProtocollsCorrect(p1, p2), "Error, the protocols are wrong");
    }

    if (somethingCompeletlyElse) && (somethingElse) {
        Assert.isFalse(areTheProtocollsExactlyTheSame(p1, p2), "Error, the protocols are the same");
    }
}

Assert.class的其他代码:

isFalse:

public static void isFalse(boolean condition, String descr) {
    isTrue(!condition, descr);
}

IsTrue运算:

public static void isTrue(boolean condition, String descr) {
    if (!condition) {
        fail(descr);
    }
}

失败:

public static void fail(String descr) {
    LOGGER.fatal("Assertion failed: " + descr);
    throw new AssertException(descr);
}

测试方法应该正确执行的操作已经完成。但我想测试那些断言。这个断言是代码的一个重要部分,我想看看当我向它提供错误数据时该方法是否抛出了这些错误。我怎么能用JUnit来做呢?

1 个答案:

答案 0 :(得分:1)

首先,我目前正在使用JUnit,您不应该使用自己的assert*fail方法进行编码:它们已包含在Assert类中。

无论如何,如果你想测试你的断言,你必须编写两种测试用例:正面案例和负面(失败)案例:

@Test
public void positiveCase1()
{
    // Fill your input parameters with data that you know must work:
    List<Protocoll> protocolList=...
    testedMethod(protocolList);
}

@Test
public void positiveCase2()
{
    ...
}

@Test(expected=AssertException.class)
public void negativeCase1()
{
    // Fill your input parameters with data that you know must NOT work:
    List<Protocoll> protocolList=...
    testedMethod(protocolList);
}

@Test(expected=AssertException.class)
public void negativeCase2()
{
    ...
}

expected注释中的Test参数使JUnit检查是否引发了该类型的异常。否则,测试标记为失败

但我仍然坚持认为使用JUnit标准会更好。