`

junit 注解 及 Assert(转)

阅读更多

JUnit4注解

@RunWith(SpringJUnit4ClassRunner.class) 用于配置spring中测试的环境

 

@Test标注在方法前,表示其是一个测试的方法 无需在其配置文件中额外设置属性.

 

@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
}
 
测试中的事务配置 ,
AbstractTransactionalJUnit38SpringContextTests、 AbstractTransactionalJUnit4SpringContextTests
AbstractTransactionalTestNGSpringContextTests
已经在类级别预先配置了好了事物支持

在普通spring的junit环境中配置事务
在类之前加入注解
@TransactionConfiguration(transactionManagert="txMgr",defaultRollback=false)
@Transactional
在方法中主要使用的Annotation包括
@TestExecutionListeners({})---用于禁用默认的监听器 否着需要通过@contextconfiguration配置一个ApplicationContext;

@BeforeTransaction
@Before
@Rollback(true)
@AfterTransaction
@NotTransactional
 
例:
@RunWith(SpringJUnit4ClassRunner.class)   
@ContextConfiguration(locations="../applicationContext.xml")   
public class SimpleDaoTest {   
    @Autowired   
    private SimpleDaoInterface<Object> simpledao;   
       
    @Test   
    public void testaddObject()   
     {   
         System.out.println("执行测试");   
         Usertable us = new Usertable("tom","123","orz");   
         Object obj = simpledao.addObject(us);   
         Assert.assertSame(us, obj);   
         System.out.println("运行完成");   
     }   
}   
 

junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类。

1.assertTrue/False([String message,]boolean condition);
    用来查看变量是是否为false或true,如果assertFalse()查看的变量的值是false则测试成功,如果是true则失败,assertTrue()与之相反;

 

2.fail([String message,]);
    直接用来抛出错误。

 

3.assertEquals([String message,]Object expected,Object actual);
    判断是否相等,可以指定输出错误信息。
    第一个参数是期望值,第二个参数是实际的值。
    这个方法对各个变量有多种实现

 

4.assertNotNull/Null([String message,]Object obj);
    判读一个对象是否非空(非空)。

5.assertSame/NotSame([String message,]Object expected,Object actual);
    判断两个对象是否指向同一个对象。看内存地址。


7.failNotSame/failNotEquals(String message, Object expected, Object actual)
    当不指向同一个内存地址或者不相等的时候,输出错误信息。
    注意信息是必须的,而且这个输出是格式化过的。

分享到:
评论
1 楼 tangxuan1988 2012-02-23  
这标题误导人啊。

相关推荐

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

    import static org.junit.Assert.*; public class MyTest { @Test public void testMyMethod() { MyClass myClass = new MyClass(); String result = myClass.myMethod(); assertEquals("Expected result", ...

    JUnit入门及简单使用

    import static org.junit.Assert.assertEquals; public class ATest { @Test public void testSum() { A a = new A(1, 2); assertEquals(3, a.sum()); } @Test public void testReverse() { A a = new A(...

    junit5.jar

    在进行实际测试时,可以创建一个继承自`org.junit.jupiter.api.TestInstance`的测试类,利用JUnit Jupiter提供的各种注解编写测试用例。例如: ```java import org.junit.jupiter.api.DisplayName; import org....

    jUnit入门教程 jUnit教程

    2. 断言:使用jUnit提供的assert方法来检查预期结果。例如,`assertEquals(expected, actual)`用于比较预期值和实际值是否相等。 四、注解详解 - `@Test`: 表示该方法是一个测试用例,可以包含期望的异常、超时等...

    Junit 单元测试完整案例

    【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...

    junit工具jar包

    import static org.junit.Assert.assertEquals; public class MyTest { @Test public void testMyFunction() { int result = myFunction(2, 3); assertEquals(5, result); } private int myFunction(int a, ...

    junit测试_java_JUnit_JUnit测试_

    例如,文件可能会讲解如何设置一个基本的JUnit测试类,通常这个类会继承自`junit.framework.TestCase`(对于较旧的JUnit版本)或者使用注解`@RunWith(JUnit4.class)`(对于JUnit 4及以上版本)。 测试类中的每个...

    Junit 4.12 及 hamcrest-core 1.3 工具包

    import static org.junit.Assert.assertEquals; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; public class ExampleTest { @Test public void testExample() {...

    eclipse中使用junit4

    JUnit4是JUnit框架的一个重大改进,特别是在Java5引入注解功能之后。注解(Annotation)在Java中是一种元数据,用于提供额外的信息来描述类、方法或变量的用途,类似于公共(public)、静态(static)等关键字。 在...

    Junit

    JUnit提供了一组注解(annotations),如@Test,用于标记测试方法,以及@Before和@After用于设置测试前的环境和清理工作。 在“junit3_demo01”和“junit3_demo02”这两个文件中,我们可能会看到JUnit 3版本的示例...

    junit4.10下载

    在断言方面,JUnit 4.10 提供了丰富的`Assert`类,包括`assertEquals`、`assertNotEquals`、`assertTrue`、`assertFalse`等方法,用于验证程序的输出是否符合预期。同时,JUnit 4.10 还引入了Hamcrest匹配器,它们...

    Junit4使用方法

    JUnit4 提供了多种 assert 方法,例如assertEquals、assertSame、assertTrue 等,可以根据需要选择合适的 assert 方法。 JUnit4 的优点 JUnit4 的优点包括: * 向后兼容,可以运行 JUnit3 的测试 * 提供了多种 ...

    JUnit 4测试驱动开发----junit技术讲解

    JUnit 4 的主要创新在于其利用Java 5的注解机制来标识测试方法,替代了JUnit 3中基于方法名和类继承的模式。这不仅提高了代码的可读性,还降低了测试代码与业务逻辑之间的耦合。例如,`@Test`注解用于标记测试方法,...

    Junit 测试简单代码

    一个简单的JUnit测试类通常会继承自`junit.framework.TestCase`(JUnit 4及之前版本)或者使用`@RunWith(JUnitPlatform.class)`注解(JUnit 5及以上版本)。下面是一个基于JUnit 4的简单示例: ```java import org....

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

    import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorTest { private Calculator calculator = new Calculator(); @Test public void testAdd() { int result = ...

    Junit实例_一个Junit的实例_

    import static org.junit.Assert.assertEquals; public class DateCalculatorTest { private DateCalculator calculator = new DateCalculator(); @Test public void testCalculateNextDay() { String input =...

    Junit4的解释文档javadoc下载

    除此之外,JUnit4还支持注解驱动的断言,如`Assert.assertEquals()`、`Assert.assertTrue()`等,它们用于检查程序的行为是否符合预期。JavaDoc会详细说明各种断言方法的用法和行为。 `@Ignore`注解用于临时跳过某个...

Global site tag (gtag.js) - Google Analytics