`

junit4注解

 
阅读更多

1    @BeforeClass      @AfterClass          (针对类)

使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。 
使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。 
保证这两种方法都使用 public static void 修饰,而且不能带有任何参数。 

2     @Before              @After                   (针对实例)

使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。 
使用注解 org.junit.After 修饰用于注销 Fixture 的方法。 
保证这两种方法都使用 public void 修饰,而且不能带有任何参数。 

@Before
使用了该元数据的方法在每个测试方法执行之前都要执行一次。

@After

使用了该元数据的方法在每个测试方法执行之后要执行一次。

注意:@Before@After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUptearDown方法,当然你还可以继续叫这个名字,不过JUnit不会霸道的要求你这么做了。

3     @Test(expected=UnsupportedDBVersionException.class)

指定抛出异常,没有异常测试不过. 

@Test(expected=*.class)
JUnit4.0之前,对错误的测试,我们只能通过fail来产生一个错误,并在try块里面assertTruetrue)来测试。现在,通过@Test元数据中的expected属性。expected属性的值是一个异常的类型

@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败。


@ignore

该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

    @RunWith(CustomTestRunner.class)
       public class TestWordDealUtil {......}

JUnit 为单元测试提供了默认的测试运行器 
可以为每一个测试类指定使用某个具体的运行器 
8    @RunWith(Suite.class)
      @Suite.SuiteClasses({TestWordDealUtil.class})

       public class RunAllUtilTestsSuite {}

创建一个空类作为测试套件的入口。 
使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。 
将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。 
将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。 
保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。

9   参数化测试

为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。 
为测试类声明几个变量,分别用于存放期望值和测试所用数据。 
为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。 
为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。 
编写测试方法,使用定义的变量作为参数进行测试。 
      view plaincopy to clipboardprint?
@RunWith(Parameterized.class)   
public class TestWordDealUtilWithParam {   

        private String expected;   
       
        private String target;   
       
        @Parameters 
        public static Collection words(){   
                return Arrays.asList(new Object[][]{   
                {"employee_info", "employeeInfo"},      //测试一般的处理情况   
                {null, null},                           //测试 null 时的处理情况   
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|   
|-------- XML error: The previous line is longer than the max of 90 characters ---------|   
                {"", ""},                               //测试空字符串时的处理情况   
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|   
|-------- XML error: The previous line is longer than the max of 90 characters ---------|   
                {"employee_info", "EmployeeInfo"},      //测试当首字母大写时的情况   
                {"employee_info_a", "employeeInfoA"},   //测试当尾字母为大写时的情况   
                {"employee_a_info", "employeeAInfo"}    //测试多个相连字母大写时的情况   
                });   
        }   
       
         
        public TestWordDealUtilWithParam(String expected , String target){   
            this.expected = expected;   
            this.target = target;   
        }   
       
         
        @Test public void wordFormat4DB(){   
            assertEquals(expected, WordDealUtil.wordFormat4DB(target));   
        }   

@RunWith(Parameterized.class)
public class TestWordDealUtilWithParam {

   private String expected;

   private String target;

   @Parameters
   public static Collection words(){
        return Arrays.asList(new Object[][]{
           {"employee_info", "employeeInfo"},   //测试一般的处理情况
           {null, null},        //测试 null 时的处理情况
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
           {"", ""},         //测试空字符串时的处理情况
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
           {"employee_info", "EmployeeInfo"},   //测试当首字母大写时的情况
           {"employee_info_a", "employeeInfoA"}, //测试当尾字母为大写时的情况
           {"employee_a_info", "employeeAInfo"} //测试多个相连字母大写时的情况
        });
   }


   public TestWordDealUtilWithParam(String expected , String target){
    this.expected = expected;
    this.target = target;
   }


   @Test public void wordFormat4DB(){
    assertEquals(expected, WordDealUtil.wordFormat4DB(target));
   }
}

Spring 相关

@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)

 

@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 { // ... }

 

@IfProfileValue

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

@IfProfileValue(name=”java.vendor”, value=”Sun Microsystems Inc.”)

同时@IfProfileValue可配置一个值列表 (使用OR 语义) 来在JUnit环境中获得TestNG的测试组支持。 看下面的例子:

@IfProfileValue(name=”test-groups”, values={”unit-tests”, “integration-tests”})

@ProfileValueSourceConfiguration

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

@ProfileValueSourceConfiguration(CustomProfileValueSource.class)

@DirtiesContext

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

@ExpectedException

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

@ExpectedException(SomeBusinessException.class)

@Repeat

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

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

@Repeat(10)

@Rollback

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

@Rollback(false)

@NotTransactional

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

@NotTransactional

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})

@TransactionConfiguration

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

@ContextConfiguration @TransactionConfiguration(transactionManager="txMgr", defaultRollback=false)

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

@BeforeTransaction

@AfterTransaction

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

@AfterTransaction

分享到:
评论

相关推荐

    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,完整压缩文件,支持注解

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

    Junit4单元测试入门例子

    针对Calculate类 (含加减乘除4个方法),使用junit4进行简单的单元测试例子,含注释~

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

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

    MyBatis 需要注意的地方junit注解

    1.junit 常用注解 @Before 初始化方法,每次测试方法调用前都执行一次。 @After 释放资源:每次测试方法调用后都执行一次 @Test 测试方法:在这里可以测试期望异常和超时时间 @ignore 忽略的测试方法 @BeforeClass ...

    反射和注解模拟JUnit4单元测试例子

    介绍如何利用反射和注解去简单的模拟JUnit4单元测试的使用,之所以选择JUnit4是...需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程。所以本文的主要目是介绍反射和注解的使用

    单元测试利器 JUnit 4

    详细的介绍了junit单元测试的过程,JUnit 是 Java 社区中知名度最高的单元测试工具,本文中所介绍的是最新的JUnit 4单元测试,JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单

    junit4帮助(chm版)

    junit帮助chm版,语言:英文,版本:4.4.1

    JUnit4 与 JMock 之双剑合璧.doc

    在 developerWorks 上面有一些关于 JUnit4 的文章,也有关于 JMock 的文章,但是结合这两项技术的文章基本上没有。...JUnit4 使用了 Java 5 注解让测试的过程变得更方便和灵活,因此备受开发者的青睐。

    追求代码质量:Junit4与TestNG的对比

    本文介绍了JUnit 4并不是第一个提供基于注释的灵活模型的Java:trade_mark:测试框架。在修改JUnit之前很久TestNG 就已建立为一个基于注释的框架。事实上,是TestNG在Java编程中率先 实现了利用注释进行测试,这使它...

    Junit4+Spring2.5单元测试代码示例(也适用注解测试)

    Junit4+Spring2.5单元测试代码示例同时也适用注解注入的形式测试(前提要导好测试的包哦,包MyEclipce自带了)

    junit 4 资料

    它大大简化了开发人员执行单元测试的难度,特别是 JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单。 在单元测试前首先规划单元测试代码应放在什么地方。把它和被测试代码混在一起,这显然会照成混乱...

    junit-4.12-API文档-中文版.zip

    赠送jar包:junit-4.12.jar; 赠送原API文档:junit-4.12-javadoc.jar; 赠送源代码:junit-4.12-sources.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    junit-4.13.2的压缩包,JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试

    JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有(下列注解标示了单元测试的不同运行阶段执行的代码): @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行(每个测试...

    junit-4.13.2-API文档-中文版.zip

    赠送jar包:junit-4.13.2.jar; 赠送原API文档:junit-4.13.2-javadoc.jar; 赠送源代码:junit-4.13.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    单元测试JUnit常用断言方法

    单元测试 JUnit 断言 注解 mock Unitils spring 注解

    junit5学习入门

    • 提供注释来识别测试方法。 • 提供断言来测试预期结果。 • 提供测试运行来运行测试。 • JUnit 测试允许你编写代码更快,并能提高质量。 • JUnit 优雅简洁。没那么复杂,花费时间较少。 • JUnit 测试可以自动...

    java自定义注解\标签库\监听\junit简单测试

    java自定义 注解 annotation、标签库tag、监听listener、junit简单测试代码

    单元测试利器JUnit4

    本文内容包括:引言JUnit4初体验JUnit深入JUnit和Ant总结本文主要介绍了如何使用JUnit4提供的各种功能开展有效的单元测试,并通过一个实例演示了如何使用Ant执行自动化的单元测试。本文假设读者对Eclipse下进行Java...

    junit-jupiter-api-5.7.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.7.2.jar; 赠送原API文档:junit-jupiter-api-5.7.2-javadoc.jar; 赠送源代码:junit-jupiter-api-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Global site tag (gtag.js) - Google Analytics