我目前正在测试一种方法,我称之为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来做呢?
答案 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标准会更好。