`

JUnit4注解

阅读更多

@ContextConfiguration 用来指定加载的Spring配置文件的位置,会加载默认配置文件

例如下例会加载:classpath:/com/example/MyTest-context.xml文件

package com.example;

@ContextConfiguration
public class MyTest {
    // class body...
}

@ContextConfiguration 注解有以下两个常用的属性:

  • locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件。如下所示:
    @ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})
  • inheritLocations:是否要继承父测试用例类中的 Spring 配置文件,默认为 true。如下面的例子:
@ContextConfiguration(locations={"base-context.xml"})
 public class BaseTest {
     // ...
 }
 @ContextConfiguration(locations={"extended-context.xml"})
 public class ExtendedTest extends BaseTest {
     // ...
 }

如果 inheritLocations 设置为 false,则 ExtendedTest 仅会使用 extended-context.xml 配置文件,否则将使用 base-context.xml 和 extended-context.xml 这两个配置文件。

在使用所有注释前必须使用@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境

Spring框架在org.springframework.test.annotation 包中提供了常用的Spring特定的注解集,如果你在Java5或以上版本开发,可以在测试中使用它。

@IfProfileValue

提示一下,注解测试只针对特定的测试环境。 如果配置的ProfileValueSource类返回对应的提供者的名称值, 这个测试就可以启动。这个注解可以应用到一个类或者单独的方法。

@IfProfileValue(name=”java.vendor”, value=”Sun Microsystems Inc.”)
public void testProcessWhichRunsOnlyOnSunJvm() {
// some logic that should run only on Java VMs from Sun Microsystems
}
同时@IfProfileValue可配置一个值列表 (使用OR 语义) 来在JUnit环境中获得TestNG的测试组支持。 看下面的例子:

@IfProfileValue(name=”test-groups”, values={”unit-tests”, “integration-tests”})
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// some logic that should run only for unit and integration test groups
}
@ProfileValueSourceConfiguration

类级别注解用来指定当通过@IfProfileValue注解获取已配置的profile值时使用何种ProfileValueSource。 如果@ProfileValueSourceConfiguration没有在测试中声明,将默认使用SystemProfileValueSource。

@ProfileValueSourceConfiguration(CustomProfileValueSource.class)
public class CustomProfileValueSourceTests {
// class body…
}
@DirtiesContext

在测试方法上出现这个注解时,表明底层Spring容器在该方法的执行中被“污染”,从而必须在方法执行结束后重新创建(无论该测试是否通过)。

@DirtiesContext
public void testProcessWhichDirtiesAppCtx() {
// some logic that results in the Spring container being dirtied
}
@ExpectedException

表明被注解方法预期在执行中抛出一个异常。预期异常的类型在注解中给定。如果该异常的实例在测试方法执行中被抛出, 则测试通过。同样的如果该异常实例没有在测试方法执行时抛出,则测试失败。

@ExpectedException(SomeBusinessException.class)
public void testProcessRainyDayScenario() {
// some logic that should result in an Exception being thrown
}
@Timed

表明被注解的测试方法必须在规定的时间区间内执行完成(以毫秒记)。如果测试执行时间超过了规定的时间区间,测试就失败了。

注意该时间区间包括测试方法本身的执行,任何重复测试(参见 @Repeat),还有任何测试fixture的set up或tear down时间。

Spring的@Timed注解与JUnit 4的@Test(timeout=...)支持具有不同的语义。 特别地,鉴于JUnit 4处理测试执行超时(如通过在一个单独的线程中执行测试方法)的方式, 我们不可能在一个事务上下文中的测试方法上使用JUnit的@Test(timeout=...)配置。因此, 如果你想将一个测试方法配置成计时具事务性的, 你就必须联合使用Spring的@Timed@Transactional注解。 还值得注意的是@Test(timeout=...)只管测试方法本身执行的次数,如果超出的话立刻就会失败; 然而,@Timed关注的是测试执行的总时间(包括建立和销毁操作以及重复),并且不会令测试失败。

@Timed(millis=1000)
public void testProcessWithOneSecondTimeout() {
// some logic that should not take longer than 1 second to execute
}
@Repeat

表明被注解的测试方法必须重复执行。执行的次数在注解中声明。

注意重复执行范围包括包括测试方法本身的执行,以及任何测试fixture的set up或tear down。

@Repeat(10)
public void testProcessRepeatedly() {
// …
}


@Rollback

表明被注解方法的事务在完成后是否需要被回滚。 如果true,事务将被回滚,否则事务将被提交。 使用@Rollback接口来在类级别覆写配置的默认回滚标志。

@Rollback(false)
public void testProcessWithoutRollback() {
// …
}
@NotTransactional

出现该注解表明测试方法必须不在事务中执行。

@NotTransactional
public void testProcessWithoutTransaction() {
// …
}

Spring TestContext Framework还支持下面这些非特定于测试的注解,并且保持其语义不变。

  • @Autowired
  • @Qualifier
  • @Resource (javax.annotation)如果JSR-250可用
  • @PersistenceContext (javax.persistence)如果JPA可用
  • @PersistenceUnit (javax.persistence)如果JPA可用
  • @Required
  • @Transactional

@TestExecutionListeners

定义类级别的元数据,TestExecutionListeners会使用TestContextManager进行注册。 通常,@TestExecutionListeners@ContextConfiguration会搭配使用。

@ContextConfiguration
@TestExecutionListeners({CustomTestExecutionListener.class, AnotherTestExecutionListener.class})
public class CustomTestExecutionListenerTests {
    // class body...
}

@TransactionConfiguration

为配置事务性测试定义了类级别的元数据。特别地,如果需要的PlatformTransactionManager不是“transactionManager”的话, 那么可以显式配置驱动事务的PlatformTransactionManager的bean名字。此外, 可以将defaultRollback标志改为false。通常, @TransactionConfiguration@ContextConfiguration搭配使用。

@ContextConfiguration
@TransactionConfiguration(transactionManager="txMgr", defaultRollback=false)
public class CustomConfiguredTransactionalTests {
    // class body...
}

@BeforeTransaction
表明被注解的public void方法应该在测试方法的事务开始之前执行, 该事务是通过@Transactional注解来配置的。

@BeforeTransaction
public void beforeTransaction() {
    // logic to be executed before a transaction is started
}

@AfterTransaction

表明被注解的public void方法应该在测试方法的事务结束之后执行, 该事务是通过@Transactional注解来配置的。

@AfterTransaction
public void afterTransaction() {
    // logic to be executed after a transaction has ended
}

分享到:
评论

相关推荐

    junit4测试jar包

    1. **注解(Annotations)**:JUnit4通过注解来标识测试方法,例如`@Test`用于标记测试方法,`@Before`和`@After`分别用于定义在每个测试方法之前和之后执行的代码。此外,还有`@BeforeClass`和`@AfterClass`,它们...

    junit4 jar完整包

    首先,JUnit4是JUnit系列的一个重大升级,引入了注解(Annotation)的概念,这使得测试用例的编写更为简洁。例如,`@Test`注解用于标记测试方法,`@Before`和`@After`则分别用于定义在每个测试方法之前和之后执行的...

    junit4 jar包

    在JUnit4中,你可以通过注解(如`@Test`、`@Before`、`@After`、`@Ignore`等)来声明和控制测试行为。`@Test`用于标记测试方法,`@Before`和`@After`则分别用于在每个测试方法之前和之后执行初始化和清理操作。`@...

    JUnit4JUnit4JUnit4(文档)

    JUnit4的核心变化之一就是引入了注解,这使得测试类和方法的声明更加简洁。例如,`@Test` 注解标记测试方法,`@Before` 和 `@After` 分别用于在每个测试方法前和后执行的设置和清理代码。还有 `@BeforeClass` 和 `@...

    junit4教程(《Junit4初探》)

    2. 创建测试类:创建一个类,并使用`@RunWith(JUnit4.class)`注解标记为JUnit4测试类。 3. 编写测试方法:使用`@Test`注解标记测试方法,并在方法内编写断言。 4. 执行测试:通过IDE或者命令行工具运行测试,查看...

    JUnit4基础文档

    本文档介绍了JUnit4的基础知识,包括单元测试的概念、JUnit4的HelloWorld示例、断言机制、注解使用、测试运行方式等。 单元测试的概念 单元测试是指对软件的最小单元进行测试,以确保其正确性和可靠性。单元测试...

    powermock-module-junit4-2.0.9-API文档-中英对照版.zip

    赠送jar包:powermock-module-junit4-2.0.9.jar; 赠送原API文档:powermock-module-junit4-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-...

    Junit4简单实用

    在 JUnit 3 中,这些功能是通过 `setUp` 和 `tearDown` 方法实现的,但在 JUnit 4 中,它们被 `@Before` 和 `@After` 注解替代,使得代码更清晰,目的性更强。 @Test:这个元数据是 JUnit 4 的核心,它用于标记测试...

    junit4 jar包 Java单元测试框架绿色免费版.zip

    JUnit4的引入极大地简化了单元测试的编写过程,它引入了注解(Annotation)的概念,使得测试类和方法的声明更加简洁。例如,`@Test`注解标记在测试方法上,表明这是一个需要执行的测试用例。此外,还有像`@Before`和...

    Junit4完整源码

    - **Test Case**:在JUnit4中,测试用例是通过继承`org.junit.Test`注解的类来定义的。每个测试方法都由`@Test`注解标记。 - **Annotations**:JUnit4引入了大量的注解,如`@Before`、`@After`、`@BeforeClass`、`...

    Junit4.zip

    此外,JUnit4支持使用`@RunWith`注解来指定运行器(Runner),比如`Parameterized`运行器用于执行参数化测试,`Suite`运行器可以组合多个测试类进行批量执行。 在实际项目中,我们通常会配合Maven或Gradle等构建...

    Junit4所需jar包

    - **注解驱动**:JUnit4引入了注解(如`@Test`、`@Before`、`@After`等),使测试类和方法的编写更加简洁。 - **异常断言**:测试方法抛出预期的异常时,可以使用`@Test(expected = Exception.class)`注解。 - **...

    最新junit4,完整压缩文件,支持注解

    这个“最新junit4,完整压缩文件,支持注解”包含了所有你需要的JUnit4库,让你能够在项目中无缝集成单元测试。 在JUnit4中,注解(Annotation)的引入是其最重要的特性之一,它改变了测试方法的声明方式。下面是...

    junit4单元测试

    首先,JUnit4是对JUnit3的一个重大改进,它引入了注解(Annotations)的概念,这使得编写测试用例更加简洁。例如,`@Test`注解用于标记测试方法,而`@Before`和`@After`则分别用于在每个测试之前和之后执行的设置和...

    Junit4使用方法

    JUnit4 使用方法 JUnit4 是一个流行的 Java 单元测试框架,提供了许多功能强大且灵活的测试工具。本文将详细介绍 JUnit4 的使用方法和核心概念。 JUnit4 核心概念 JUnit4 的核心概念包括测试类、测试集和测试运行...

    junit4 单元测试源码

    JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写测试用例更加方便。 【描述】中提到的“此文件包含源代码(简单加减乘除)”是指可能包含了一些基础的数学运算逻辑,这些...

    Junit4 jar包

    1. **注解驱动**:Junit4的核心在于其注解机制,如`@Test`用于标记测试方法,`@Before`和`@After`分别表示在每个测试方法前后的设置和清理操作,`@BeforeClass`和`@AfterClass`则在类级别的初始化和清理。...

    Junit4单元测试入门例子

    Junit4通过注解(Annotation)来简化测试用例的编写,例如`@Test`注解标记测试方法,`@Before`和`@After`注解分别表示在每个测试方法执行前后的准备工作和清理工作。Calculate类包含四个方法:add、subtract、...

    在Eclipse中使用JUnit4进行单元测试

    对于需要延迟执行或者异步测试的情况,JUnit4提供了`@Rule`和`@ClassRule`注解,可以定义自定义的测试规则。例如,`Timeout`规则可以限制测试方法的执行时间,超过设定时间就会导致测试失败。 在Eclipse中运行单元...

    JUnit4.rar(ppt讲义)

    相比JUnit 3,JUnit 4引入了许多新特性,如注解(Annotations)、参数化测试、规则(Rules)等。注解简化了测试类的创建,例如`@Test`用于标记测试方法,`@Before`和`@After`则用于定义在每个测试方法执行前后的设置...

Global site tag (gtag.js) - Google Analytics