当前位置: 首页 > 后端技术 > Java

JUnit5教程(三):_JUnit5断言

时间:2023-04-01 17:37:21 Java

大家好,我是大杨。在本文中,我们将讨论JUnit5的断言功能。JUnit5断言用于用测试的实际结果验证预期结果。为方便起见,所有JUnitJupiter断言都是org.junit.jupiter.Assertions类中的静态方法。带有异常的断言将抛出AssertionFailedError或其子类之一。1assertEquals()和assertNotEquals()Assertions.assertEquals()用于断言预期值等于实际值。Assertions.assertEquals()有许多针对不同数据类型的重载方法,如int、short、float、char等。它还支持传递错误消息,以便在测试失败时打印。示例:publicstaticvoidassertEquals(intexpected,intactual)publicstaticvoidassertEquals(intexpected,intactual,Stringmessage)publicstaticvoidassertEquals(intexpected,intactual,SuppliermessageSupplier)示例:packagecn.dayangshuo.junit5.tests;importcn.dayangshuo.junit5.Calculator;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.DisplayName;importorg.junit.jupiter.api.Test;importjava.util.function.Supplier;/***@authorDAYANG*/publicclassCalculatorTests{@Test@DisplayName("a+b=c")voidaddsTwoNumbers(){//测试通过Assertions.assertEquals(4,Calculator.add(2,2));//测试失败Assertions.assertEquals(3,Calculator.add(2,2),"Calculator.add(2,2)测试失败");//测试失败SuppliermessageSupplier=()->"Calculator.add(2,2)测试失败";Assertions.assertEquals(3,Calculator.add(2,2),messageSupplier);}}相反,Assertions.assertNotEquals()方法用于断言预期值和实际值不相等。与assertEquals()相比,assertNotEquals()不包含针对不同数据类型的重载方法,只接受Object:staticvoidassertNotEquals(Objectexpected,Objectactual,SuppliermessageSupplier)示例:@Test@DisplayName("a+b=c")voidtest(){//测试通过Assertions.assertNotEquals(3,Calculator.add(2,2));//测试失败Assertions.assertNotEquals(4,Calculator.add(2,2),"Calculator.add(2,2)测试失败");//测试失败SuppliermessageSupplier=()->"Calculator.add(2,2)测试失败";Assertions.assertNotEquals(4,Calculator.add(2,2),messageSupplier);}2assertArrayEquals()assertArrayEquals()方法断言预期数组和实际数组相等。它还具有针对不同数据类型的重载方法,例如boolean[]、char[]、int[]等。它还支持传递错误消息以在测试失败时打印。例如publicstaticvoidassertArrayEquals(int[]expected,int[]actual)publicstaticvoidassertArrayEquals(int[]expected,int[]actual,Stringmessage)publicstaticvoidassertArrayEquals(int[]expected,int[]actual,SuppliermessageSupplier)3assertIterableEquals()它断言预期的和实际的可迭代对象完全相等。精确相等是指集合中元素的个数和顺序必须相同,迭代的元素必须相等。它还具有三个重载方法。publicstaticvoidassertIterableEquals(Iterableexpected,Iterable>actual)publicstaticvoidassertIterableEquals(Iterableexpected,Iterable>actual,Stringmessage)publicstaticvoidassertIterableEquals(Iterableexpected,Iterable>actual,SuppliermessageSupplier)4assertLinesMatch()断言预期的字符串列表与实际列表匹配。5assertNotNull()和assertNull()assertNotNull()断言它实际上不为空。相反,assertNull()方法断言它实际上是空的。两者都有三个重载方法:assertEquals(Objectactual,Stringmessage)publicstaticvoidassertEquals(Objectactual,SuppliermessageSupplier)6assertNotSame()和assertSame()assertNotSame()断言expected和actual不引用同一个对象。assertSame()方法断言预期引用和实际引用是完全相同的对象。两者都有三个重载方法:assertSame(Objectexpected,Objectactual)publicstaticvoidassertSame(Objectexpected,Objectactual,Stringmessage)publicstaticvoidassertSame(Objectexpected,Objectactual,SuppliermessageSupplier)7assertTimeout()它们用于测试长-正在运行的任务,如果测试任务的时间超过指定的持续时间,测试将失败。publicstaticvoidassertTimeout(Durationtimeout,Executableexecutable)publicstaticvoidassertTimeout(Durationtimeout,Executableexecutable,Stringmessage)publicstaticvoidassertTimeout(Durationtimeout,Executableexecutable,SuppliermessageSupplier)publicstaticvoidassertTimeout(Durationtimeout,ThrowingSuppliersupplier,Stringmessage)publicstaticvoidassertTimeout(Durationtimeout,ThrowingSuppliersupplier,SuppliermessageSupplier)示例:@TestvoidtestCase(){Assertions.assertTimeout(Duration.ofMinutes(1),()->{返回“结果”;});Assertions.assertTimeout(Duration.ofMillis(100),()->{Thread.sleep(200);返回“结果”;});Assertions.assertTimeoutPreemptively(Duration.ofMillis(100),()->{Thread.sleep(200);return"result";});}8assertTrue()andassertFalse()assertTrue()断言提供的条件为真。相反,assertFalse()断言提供的条件为false。两人都有以下重载方法:publicstaticvoidassertTrue(booleancondition)publicstaticvoidassertTrue(booleancondition,Stringmessage)publicstaticvoidassertTrue(booleancondition,SuppliermessageSupplier)publicstaticvoidassertTrue(BooleanSupplierbooleanSupplier)publicstaticvoidassertTrue(BooleanSupplierbooleanSupplier,Stringmessage)publicstaticvoidassertTrue(BooleanSupplierbooleanSupplier,SuppliermessageSupplier)publicstaticvoidassertFalse(布尔条件)publicstaticvoidassertFalse(布尔条件,字符串消息)publicstaticvoidassertFalse(booleancondition,SuppliermessageSupplier)publicstaticvoidassertFalse(BooleanSupplierbooleanSupplier)publicstaticvoidassertFalse(BooleanSupplierbooleanSupplier,Stringmessage)publicstaticvoidassertFalse(BooleanSupplierbooleanSupplier,SuppliermessageSupplier)9assertThrows()assetThrows()断言提供的可执行执行会引发expectedType异常和返回异常//重载方法publicstaticTassertThrows(ClassexpectedType,Executableexecutable)//example@TestvoidtestCase(){Throwableexception=Assertions.assertThrows(IllegalArgumentException.class,()->{thrownewIllegalArgumentException("错误信息");});}10fail()fail()方法指的是失败的测试它有以下重载方法:staticvoidfail(SuppliermessageSupplier)publicclassAppTest{@TestvoidtestCase(){Assertions.fail("没有找到通过的充分理由");Assertions.fail(AppTest::message);}privatestaticStringmessage(){返回“没有找到通过的充分理由”;}}