Junit断言

        JUnit 是一个流行的 Java 测试框架,它提供了一套丰富的断言(assertions)机制来帮助开发者验证代码的行为是否符合预期。断言是自动化测试中非常重要的一个概念,它用于检查代码是否按预期工作。如果断言失败,测试会立即停止执行,并报告失败的原因。

在 JUnit 中,断言主要通过 org.junit.Assert 类(在 JUnit 4 中)或者通过静态导入 JUnit 5 的 org.junit.jupiter.api.Assertions 类中的静态方法来实现。

JUnit 4 中的断言

        在 JUnit 4 中,你可以使用 org.junit.Assert 类中的静态方法来执行断言。以下是一些常见的断言方法:

  • assertEquals(expected, actual): 检查两个值或数组是否相等。
  • assertTrue(condition): 检查条件是否为真。
  • assertFalse(condition): 检查条件是否为假。
  • assertNotNull(object): 检查对象是否不为 null。
  • assertNull(object): 检查对象是否为 null。
  • assertSame(expected, actual): 检查两个对象引用是否指向同一个对象。
  • assertNotSame(unexpected, actual): 检查两个对象引用是否不指向同一个对象。

        JUnit 5 中的断言

JUnit 5 引入了更丰富的断言库,并且允许通过静态导入 org.junit.jupiter.api.Assertions 类中的静态方法来实现断言,使得代码更加简洁。以下是一些常见的断言方法(与 JUnit 4 类似,但可能有一些差异和新增):

  • assertEquals(expected, actual): 检查两个值是否相等。
  • assertTrue(condition): 检查条件是否为真。
  • assertFalse(condition): 检查条件是否为假。
  • assertNotNull(object): 检查对象是否不为 null。
  • assertNull(object): 检查对象是否为 null。
  • assertSame(expected, actual): 检查两个对象引用是否相同。
  • assertNotSame(unexpected, actual): 检查两个对象引用是否不同。

此外,JUnit 5 还添加了一些新的断言方法,如:

  • assertDoesNotThrow(executable, exceptionType): 验证代码块执行时不会抛出任何异常或特定类型的异常。
  • assertThrows(expectedType, executable): 验证代码块执行时会抛出特定类型的异常。
  • assertAll(executables): 将多个断言合并为一个,以便所有断言都失败时报告所有失败信息,而不是在第一个断言失败时就停止。

示例

JUnit 4 示例

import static org.junit.Assert.*; 


import org.junit.Test; 


public class MyTest { 


@Test 
public void testAddition() { 
assertEquals("2 + 2 should equal 4", 4, 2 + 2); 
} 
}

JUnit 5 示例

import static org.junit.jupiter.api.Assertions.*; 


import org.junit.jupiter.api.Test; 


public class MyTest { 


@Test 
public void testAddition() { 
assertEquals(4, 2 + 2, "2 + 2 should equal 4"); 
} 


@Test 
public void testDivision() { 
assertThrows(ArithmeticException.class, () -> { 
int result = 10 / 0; 
}); 
} 
}

        

Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions.TestSetup.class junit.extensions.package-info.class junit.framework.Assert.class junit.framework.AssertionFailedError.class junit.framework.ComparisonCompactor.class junit.framework.ComparisonFailure.class junit.framework.JUnit4TestAdapter.class junit.framework.JUnit4TestAdapterCache.class junit.framework.JUnit4TestCaseFacade.class junit.framework.Protectable.class junit.framework.Test.class junit.framework.TestCase.class junit.framework.TestFailure.class junit.framework.TestListener.class junit.framework.TestResult.class junit.framework.TestSuite.class junit.framework.package-info.class junit.runner.BaseTestRunner.class junit.runner.TestRunListener.class junit.runner.Version.class junit.runner.package-info.class junit.textui.ResultPrinter.class junit.textui.TestRunner.class junit.textui.package-info.class org.hamcrest.BaseDescription.class org.hamcrest.BaseMatcher.class org.hamcrest.CoreMatchers.class org.hamcrest.Description.class org.hamcrest.Factory.class org.hamcrest.Matcher.class org.hamcrest.SelfDescribing.class org.hamcrest.StringDescription.class org.hamcrest.core.AllOf.class org.hamcrest.core.AnyOf.class org.hamcrest.core.DescribedAs.class org.hamcrest.core.Is.class org.hamcrest.core.IsAnything.class org.hamcrest.core.IsEqual.class org.hamcrest.core.IsInstanceOf.class org.hamcrest.core.IsNot.class org.hamcrest.core.IsNull.class org.hamcrest.core.IsSame.class org.hamcrest.internal.ArrayIterator.class org.hamcrest.internal.SelfDescribingValue.class org.hamcrest.internal.SelfDescribingValueIterator.class org.junit.After.class org.junit.AfterClass.class org.junit.Assert.class org.junit.Assume.class org.junit.Before.class org.junit.BeforeClass.class org.junit.ComparisonFailure.class org.junit.Ignore.class org.junit.Rule.class org.junit.Test.class org.junit.experimental.ParallelComputer.class org.junit.experimental.categories.Categories.class org.junit.experimental.categories.Category.class org.junit.experimental.max.CouldNotReadCoreException.class org.junit.experimental.max.MaxCore.class org.junit.experimental.max.MaxHistory.class org.junit.experimental.results.FailureList.class org.junit.experimental.results.PrintableResult.class org.junit.experimental.results.ResultMatchers.class org.junit.experimental.runners.Enclosed.class org.junit.experimental.theories.DataPoint.class org.junit.experimental.theories.DataPoints.class org.junit.experimental.theories.ParameterSignature.class org.junit.experimental.theories.ParameterSupplier.class org.junit.experimental.theories.ParametersSuppliedBy.class org.junit.experimental.theories.PotentialAssignment.class org.junit.experimental.theories.Theories.class org.junit.experimental.theories.Theory.class org.junit.experimental.theories.internal.AllMembersSupplier.class org.junit.experimental.theories.internal.Assignments.class org.junit.experimental.theories.internal.ParameterizedAssertionError.class org.junit.experimental.theories.suppliers.TestedOn.class org.junit.experimental.theories.suppliers.TestedOnSupplier.class org.junit.internal.ArrayComparisonFailure.class org.junit.internal.AssumptionViolatedException.class org.junit.internal.ComparisonCriteria.class org.junit.internal.ExactComparisonCriteria.class org.junit.internal.InexactComparisonCriteria.class org.junit.internal.JUnitSystem.class org.junit.internal.RealSystem.class org.junit.internal.TextListener.class org.junit.internal.builders.AllDefaultPossibilitiesBuilder.class org.junit.internal.builders.AnnotatedBuilder.class org.junit.internal.builders.IgnoredBuilder.class org.junit.internal.builders.IgnoredClassRunner.class org.junit.internal.builders.JUnit3Builder.class org.junit.internal.builders.JUnit4Builder.class org.junit.internal.builders.NullBuilder.class org.junit.internal.builders.SuiteMethodBuilder.class org.junit.internal.matchers.CombinableMatcher.class org.junit.internal.matchers.Each.class org.junit.internal.matchers.IsCollectionContaining.class org.junit.internal.matchers.StringContains.class org.junit.internal.matchers.SubstringMatcher.class org.junit.internal.matchers.TypeSafeMatcher.class org.junit.internal.requests.ClassRequest.class org.junit.internal.requests.FilterRequest.class org.junit.internal.requests.SortingRequest.class org.junit.internal.requests.package-info.class org.junit.internal.runners.ClassRoadie.class org.junit.internal.runners.ErrorReportingRunner.class org.junit.internal.runners.FailedBefore.class org.junit.internal.runners.InitializationError.class org.junit.internal.runners.JUnit38ClassRunner.class org.junit.internal.runners.JUnit4ClassRunner.class org.junit.internal.runners.MethodRoadie.class org.junit.internal.runners.MethodValidator.class org.junit.internal.runners.SuiteMethod.class org.junit.internal.runners.TestClass.class org.junit.internal.runners.TestMethod.class org.junit.internal.runners.model.EachTestNotifier.class org.junit.internal.runners.model.MultipleFailureException.class org.junit.internal.runners.model.ReflectiveCallable.class org.junit.internal.runners.package-info.class org.junit.internal.runners.statements.ExpectException.class org.junit.internal.runners.statements.Fail.class org.junit.internal.runners.statements.FailOnTimeout.class org.junit.internal.runners.statements.InvokeMethod.class org.junit.internal.runners.statements.RunAfters.class org.junit.internal.runners.statements.RunBefores.class org.junit.matchers.JUnitMatchers.class org.junit.matchers.package-info.class org.junit.package-info.class org.junit.rules.ErrorCollector.class org.junit.rules.ExpectedException.class org.junit.rules.ExternalResource.class org.junit.rules.MethodRule.class org.junit.rules.TemporaryFolder.class org.junit.rules.TestName.class org.junit.rules.TestWatchman.class org.junit.rules.Timeout.class org.junit.rules.Verifier.class org.junit.runner.Computer.class org.junit.runner.Describable.class org.junit.runner.Description.class org.junit.runner.JUnitCore.class org.junit.runner.Request.class org.junit.runner.Result.class org.junit.runner.RunWith.class org.junit.runner.Runner.class org.junit.runner.manipulation.Filter.class org.junit.runner.manipulation.Filterable.class org.junit.runner.manipulation.NoTestsRemainException.class org.junit.runner.manipulation.Sortable.class org.junit.runner.manipulation.Sorter.class org.junit.runner.manipulation.package-info.class org.junit.runner.notification.Failure.class org.junit.runner.notification.RunListener.class org.junit.runner.notification.RunNotifier.class org.junit.runner.notification.StoppedByUserException.class org.junit.runner.notification.package-info.class org.junit.runner.package-info.class org.junit.runners.AllTests.class org.junit.runners.BlockJUnit4ClassRunner.class org.junit.runners.JUnit4.class org.junit.runners.Parameterized.class org.junit.runners.ParentRunner.class org.junit.runners.Suite.class org.junit.runners.model.FrameworkField.class org.junit.runners.model.FrameworkMember.class org.junit.runners.model.FrameworkMethod.class org.junit.runners.model.InitializationError.class org.junit.runners.model.RunnerBuilder.class org.junit.runners.model.RunnerScheduler.class org.junit.runners.model.Statement.class org.junit.runners.model.TestClass.class org.junit.runners.package-info.class org/hamcrest/core/package.html org/hamcrest/package.html
### JUnit 断言的用法与示例 JUnit 是一种广泛使用的 Java 测试框架,提供了多种断言方法来验证测试结果是否符合预期。以下是关于 JUnit 断言的一些核心概念及其具体实现。 #### 基本断言方法 JUnit 提供了一系列静态方法用于执行断言操作,这些方法通常位于 `org.junit.jupiter.api.Assertions` 类中[^1]。下面是一些常用的断言方法: - **assertEquals(expected, actual)** 验证两个对象或基本类型的值是否相等。如果它们不相等,则抛出异常并终止当前测试。 ```java assertEquals(4, 2 + 2); // 正确 ``` - **assertNotEquals(unexpected, actual)** 验证实际值是否不同于某个特定值。 ```java assertNotEquals(5, 2 + 2); // 正确 ``` - **assertTrue(condition)** 和 **assertFalse(condition)** 分别用来验证条件表达式的布尔值是否为真或假。 ```java assertTrue(2 + 2 == 4); // 正确 assertFalse(2 + 2 != 4); // 正确 ``` - ** assertNull(object)** 和 ** assertNotNull(object)** 用于判断对象是否为空或非空。 ```java String nullString = null; assertNull(nullString); // 正确 String nonNullString = "Hello"; assertNotNull(nonNullString); // 正确 ``` #### 复杂断言支持 除了基础功能外,JUnit 还允许开发者通过自定义消息增强错误报告能力。这可以通过向断言方法传递额外参数完成: ```java int result = 3 * 7; assertEquals(21, result, "Multiplication failed"); // 如果失败会显示指定的消息 ``` 对于更复杂的场景,可以利用 Lambda 表达式或者第三方库(如 AssertJ 或 Hamcrest)扩展断言逻辑[^2]。例如,在某些情况下可能需要比较集合的内容而不关心顺序差异;此时可借助工具类简化处理流程。 #### 实际应用案例 假设我们有一个简单的加法函数如下所示: ```java public class MathUtils { public static int add(int a, int b) { return a + b; } } ``` 为了确保该方法行为正常,我们可以编写相应的单元测试代码片段如下: ```java import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class MathUtilsTest { @Test void testAdd() { int sum = MathUtils.add(3, 4); assertEquals(7, sum); try { MathUtils.add(Integer.MAX_VALUE, 1); } catch (ArithmeticException e) { fail("Should not throw exception for valid inputs"); } Exception exception = assertThrows(ArithmeticException.class, () -> { MathUtils.add(-10, Integer.MIN_VALUE); }); assertEquals("Overflow occurred", exception.getMessage()); } } ``` 以上展示了如何运用不同种类的断言覆盖各种边界情况下的输入输出校验过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值