junit.Test 的使用方法

在 Maven 项目中使用 JUnit,你需要在项目的 pom.xml 文件中添加 JUnit 依赖。然后,你可以创建测试类,并在测试类中使用 @Test 注解标识测试方法。

基本使用

以下是一般步骤:

  1. pom.xml 文件中添加 JUnit 依赖:
<dependencies>
    <!-- 其他依赖... -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version> <!-- 版本号可能会有更新 -->
        <scope>test</scope>
    </dependency>
</dependencies>

确保将 JUnit 依赖的作用范围(<scope>)设置为 test,这样 JUnit 将只在测试阶段可用,而不会影响应用程序的运行时依赖。

  1. 创建测试类:

创建一个测试类,例如 MyTestClass,其中包含测试方法并使用 @Test 注解标识:

import org.junit.Test;
import static org.junit.Assert.*;

public class MyTestClass {

    @Test
    public void testAddition() {
        int result = 2 + 2;
        assertEquals(4, result); // 断言,验证结果是否符合预期
    }

    @Test
    public void testSubtraction() {
        int result = 5 - 3;
        assertTrue(result > 0); // 断言,验证结果是否为真
    }
}
  1. 运行测试:

你可以使用 Maven 命令来运行测试。在项目的根目录下执行以下命令:

mvn test

或者直接在IDEA中点击左侧的绿色三角

这将会编译项目并运行所有的测试类。测试结果将会显示在控制台上。

注意:如果你使用的是 JUnit 5,依赖的坐标和测试类的注解会有所不同。

在这种情况下,你需要使用 junit-jupiter-apijunit-jupiter-engine 依赖,以及使用 @Test 注解来标识测试方法。在 pom.xml 中可能看起来类似于以下内容:

<dependencies>
    <!-- 其他依赖... -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.0</version> <!-- 版本号可能会有更新 -->
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.8.0</version> <!-- 版本号可能会有更新 -->
        <scope>test</scope>
    </dependency>
</dependencies>

其他注解

JUnit 提供了多个注解,用于标识测试类和测试方法的不同方面。以下是一些常用的 JUnit 注解:

@Before 和 @After

  • @Before 注解标识的方法在每个测试方法之前执行,用于进行一些初始化操作。
  • @After 注解标识的方法在每个测试方法之后执行,用于进行一些清理操作。
```java
import org.junit.Before;
import org.junit.After;

public class MyTestClass {

    @Before
    public void setUp() {
        // 执行初始化操作
    }

    @After
    public void tearDown() {
        // 执行清理操作
    }

    // 测试方法...
}
```

@BeforeClass 和 @AfterClass

  • @BeforeClass 注解标识的方法在所有测试方法执行前执行,通常用于执行一次性的设置。
  • @AfterClass 注解标识的方法在所有测试方法执行完毕后执行,通常用于执行一次性的清理操作。
```java
import org.junit.BeforeClass;
import org.junit.AfterClass;

public class MyTestClass {

    @BeforeClass
    public static void setUpClass() {
        // 执行一次性的设置
    }

    @AfterClass
    public static void tearDownClass() {
        // 执行一次性的清理操作
    }

    // 测试方法...
}
```

@Ignore

  • @Ignore 注解用于标识不想执行的测试方法。可以用于临时禁用某些测试,通常在开发过程中用得较多。
```java
import org.junit.Ignore;

public class MyTestClass {

    @Test
    public void testMethod1() {
        // 测试代码...
    }

    @Ignore
    @Test
    public void testMethod2() {
        // 这个测试将会被忽略
    }
}
```

@RunWith

  • @RunWith 注解用于指定测试运行器(Runner)。JUnit 默认使用 BlockJUnit4ClassRunner,但你可以使用其他的运行器,例如 Parameterized,以实现不同的测试行为。
```java
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

@RunWith(Parameterized.class)
public class MyParameterizedTest {
    // 参数化测试代码...
}
```

这只是 JUnit 提供的一小部分注解,还有其他用于参数化测试、超时控制等的注解。不同版本的 JUnit 可能会引入新的注解或者修改现有注解的行为,因此查阅相应版本的文档是很重要的。

参数化测试

参数化测试是一种测试方法,它允许你使用不同的输入值多次运行相同的测试方法。
这对于测试同一片代码的不同输入或边缘情况非常有用。在 JUnit 4 中,参数化测试通常通过使用 @RunWith 注解和 @Parameters 注解来实现。

下面是一个简单的例子,演示了如何使用参数化测试:

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class MyParameterizedTest {

    private int input;
    private int expected;

    // 构造函数用于接收参数
    public MyParameterizedTest(int input, int expected) {
        this.input = input;
        this.expected = expected;
    }

    // 提供测试参数
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {
            {1, 2},
            {2, 4},
            {3, 6},
            {4, 8}
        });
    }

    // 实际测试方法
    @Test
    public void testMultiply() {
        MyClass myClass = new MyClass();
        assertEquals(expected, myClass.multiplyByTwo(input));
    }
}

在上面的例子中,MyParameterizedTest 类使用 @RunWith(Parameterized.class) 注解来告诉 JUnit 使用参数化运行器运行测试。然后,通过 @Parameters 注解提供了一组测试参数,其中每个参数是一个输入值和预期输出值的组合。测试方法 testMultiply() 会使用这些参数执行多次,确保代码在不同输入下的正确性。

需要注意的是,以上是基于 JUnit 4 的示例,JUnit 5 中引入了新的注解 @ParameterizedTest,并提供了更灵活的方式来执行参数化测试。在 JUnit 5 中,你可以使用 @CsvSource@ValueSource 等注解来定义参数。

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值