你能在同一个junit测试中有多个assertEquals(答案,结果)吗?

时间:2014-05-27 05:36:27

标签: java testing junit

为作业进行一些junit测试。只是想知道在同一个测试中是否可以有多个assertEquals()语句?当它通过时,这是否意味着如果一个assertEquals语句失败将会失败?或者它只接受一个assertEquals()语句?

    car3 = new Car("gargle", 45, false);
    car4 = new Car("cheese", 45, true);
    moto3 = new MotorCycle("ass", 45);

    assertEquals(true, carPark.spacesAvailable(car3));
    assertEquals(true, carPark.spacesAvailable(car4));
    assertEquals(true, carPark.spacesAvailable(moto3));

只会使用第一个assertEquals或将全部使用

4 个答案:

答案 0 :(得分:6)

所有断言将按顺序运行。第一个失败的断言导致测试失败,之后没有进一步的断言。

AssertJ有一种机制允许运行所有断言,无论它们是成功还是失败:

final SoftAssertions soft = new SoftAssertions();
soft.assertThat(...);
soft.assertThat(...);
soft.assertThat(...);
soft.assertAll();

这将报告在.assertAll()上失败的所有断言。 Link to javadoc


编辑从2.0.0(仅限Java 7+)开始,还有AutoCloseableSoftAssertions,这意味着您最后不需要.assertAll()

try (
    final AutoCloseableSoftAssertions soft
        = new AutoCloseableSoftAssertions();
) {
    soft.assertThat(thePope).isSaint(); // or whatever
} // <--- .assertAll() here!

答案 1 :(得分:0)

是的,可以在一个unittest中有多个assertEquals。如果其中一个assertEquals返回false,则单元测试失败。

答案 2 :(得分:0)

是的,你可以在j / x / n单元测试中有许多不同的断言语句。 但是,正如您所发现的,如果任何断言失败,整个testMethod将因此失败。

正如它所发生的那样,在testMethod内部,测试运行器将开始执行assert语句。一旦失败,testMethod将返回,而不执行任何其他断言。

答案 3 :(得分:0)

亲爱的,我想给你一个建议,如果你想使用多个断言。如果使用&#34; if else&#34;会更好。多个AssertTrue的条件。