`

JUnit4 Annotations(注释

阅读更多
@Test public void method() 定义一个要测试的方法
@Before public void method() 在每一个测试之前都会被执行的方法,这个方法常常用来进行一些测试环境的准备,比喻说读入输入数据,初始化类
@After public void method()

@Before 进行对应,做一个清理工作

@BeforeClass public void method() 在所有的测试开始之前执行,这个方法在类运行的时候运行,而且只会运行一次,所以常常用来做一些所有的方法都要依赖到工作,比喻说,数据库的链接。
@AfterClass public void method()

@BeforeClass 进行对应,做一些类级别的清理工作

@Ignore 表明方法是被忽略的,这个方法非常实用,比喻你的方法已经修改,但是对应的测试方法还没有得到一致的修改的时候,可以忽略掉这个测试方法先。
@Test(expected=IllegalArgumentException.class) 检查测试方法是不是抛出了对应的异常
@Test(timeout=100)

如果方法的执行操作所耗费的毫秒数 >100MS ,那么方法失败。

 

修改MathDemo类中div方法如下所示:

public int div(int a, int b) {
		if(b == 0)
			throw new ArithmeticException("除数不能为零");
		return a / b;
	}

 测试用例如下所示:

package com.reiyen.junit;

import static org.junit.Assert.assertEquals;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class MathDemoTest2 {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("set up.......");
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("gone........");
	}

	@Test
	public void testAdd() {
		assertEquals("1不等于2", 1 ,2);
	}

	@Test(expected=ArithmeticException.class)
	public void testDiv(){
		assertEquals(1, new MathDemo().div(1,0));
	}
}

 运行此测试用例,控制台打印信息如下:

set up.......
gone........

测试方法testAdd()未通过,打印如下信息:java.lang.AssertionError: 1不等于2 expected:<1> but was:<2>

测试方法testDiv()通过,因为当除数为0时,抛出了ArithmeticException;如果改为:

@Test(expected=ArithmeticException.class)
	public void testDiv(){
		assertEquals(1, new MathDemo().div(1,1));
	}

则未通过,打印出了如下异常:java.lang.AssertionError: Expected exception: java.lang.ArithmeticException

 

在 JUnit 4 中,您仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫做 setUp(),只要用 @Before 注释来指示即可,如下所示:

@Before
protected void initialize() {
	System.setErr(new PrintStream(new ByteArrayOutputStream()));
	inputDir = new File("data");
	inputDir = new File(inputDir, "xslt");
	inputDir = new File(inputDir, "input");
} 

 甚至可以用 @Before 来注释多个方法,这些方法都在每个测试之前运行:

@Before 
protected void findTestDataDirectory() {
	inputDir = new File("data");
	inputDir = new File(inputDir, "xslt");
	inputDir = new File(inputDir, "input");
}

@Before 
protected void redirectStderr() {
	System.setErr(new PrintStream(new ByteArrayOutputStream()));
} 

对于JUnit 3 中的tearDown() 方法,在JUnit 4,我可以给它取一个更自然的名称,并用 @After 注释它:

@After 
protected void disposeDocument() {
 doc = null;
 System.gc();
}

 与 @Before 一样,也可以用 @After 来注释多个清除方法,这些方法都在每个测试之后运行。最后,您不再需要在超类中显式调用初始化和清除方法,只要它们不被覆盖即可,测试运行程序将根据需要自动为您调用这些方法。超类中的 @Before 方法在子类中的 @Before 方法之前被调用(这反映了构造函数调用的顺序)。@After 方法以反方向运行:子类中的方法在超类中的方法之前被调用。否则,多个 @Before 或 @After 方法的相对顺序就得不到保证。

时间测试

性能测试是单元测试中最头疼的问题,JUnit 4也未完全解决此问题, 你可以在JUNIT4的测试方法中添加一个时间参数。如果测试时间超过参数,则测试失败。如下,如果测试时间超过0.5秒,则此测试失败:

@Test(timeout=500) 
public void retrieveAllElementsInDocument() 
{ 
	doc.query("//*");
 }

 除基准性能测试外,时间测试在网络测试方面也很有用.如果一个远端的主机或数据当掉或太慢,你可以跳过此测试而不用阻塞在这里,好的测试集可以在作了一些改动后很快的一遍一遍的执行,可能一天数十次.设置一个超时让测试更快的执行,下面的示例中如果分析http://www.ibiblio.org/xml 的时间超过2秒,则测试失败.

@Test(timeout=2000) 
public void remoteBaseRelativeResolutionWithDirectory() throws IOException, ParsingException 
{ 
	builder.build("http://www.ibiblio.org/xml"); 
} 
 

需要忽略的测试

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

 

@Test
@Ignore
public void test1(){
.............
}
  • 大小: 15.8 KB
分享到:
评论

相关推荐

    JUnit4.zip

    - **注解(Annotations)**:JUnit 4开始大量使用注解(如@Test、@Before、@After、@Ignore等),使得测试类的结构更加简洁,减少了元编程的需求。 - **参数化测试(Parameterized Tests)**:允许用不同的参数多次...

    jtestsuiteplugin.eclipse-plugin:用于扩展 JUnit 测试的注释

    用于扩展 JUnit 测试的注释 Eclipse 插件的更新站点 URL:jar: : 注释 jar 的下载 URL: 例子 package test; import gh.funthomas424242.junitsupport.annotations.TestSuite; public class TestSuiteDefinition ...

    junit-report-annotations-action:创建构建信息的注释,并将前n个失败的测试作为单独的注释列出

    junit-report-annotations-action 创建构建信息的注释,并将前n个失败的测试作为单独的注释列出 例子 - uses: ashley-taylor/junit-report-annotations-action@1.3 if: always() with: access-token: ${{ ...

    JUNIT测试

    3. **测试注解(Annotations)**:虽然JUnit 3不支持注解,但其后的版本(如JUnit 4和JUnit 5)引入了注解,使得测试更加简洁。例如,`@Test`注解标识一个方法为测试方法,`@Before`和`@After`注解分别表示在所有...

    junit 工具

    1. **注解(Annotations)**:JUnit 4.9大量使用了Java注解,如`@Test`用于标记测试方法,`@Before`和`@After`用于定义在每个测试方法执行前后的准备工作和清理工作,`@BeforeClass`和`@AfterClass`则是在所有测试...

    junit总结

    4. 编写可读性强的测试:JUnit支持使用注释和自定义断言,使得测试代码易于理解和维护。 5. 参数化测试:通过`@Parameterized`注解,可以对一组输入数据执行相同的测试逻辑,以覆盖多种情况。 四、JUnit与源码分析...

    junit-4.8.2.rar

    1. **注解(Annotations)**:JUnit 4.8.2引入了注解,如`@Test`、`@Before`、`@After`等,使得测试代码更加简洁、易读。`@Test`用于标记测试方法,`@Before`和`@After`则分别表示在每个测试方法之前和之后执行的...

    junit-4.12

    此外,4.12版本引入了注解(Annotations)的概念,例如@Test,这使得测试代码更加整洁,更易于理解。只需在测试方法前添加@Test注解,JUnit就会自动识别并执行该方法。 除了基本的断言和测试注解,JUnit 4.12还支持...

    junit4.12-categories-configuration-sample:尝试结合使用类别注释和封闭注释时的行为

    在JUnit 4.12版本中,引入了"类别注释"(Category Annotations)的概念,这允许我们更灵活地组织和执行测试用例。本示例项目“junit4.12-categories-configuration-sample”深入探讨了如何结合类别注释和封闭注释...

    jozi-jug-annotations:来自 jozi-jug 注释演示的源代码

    4. **Javadoc注释**:用于生成API文档的注释,通常以`/** ... */`形式出现,包含在方法、类或接口声明之前,可以包含HTML标签以提高可读性。 5. **运行时注解**:通过`@Retention(RetentionPolicy.RUNTIME)`,注解...

    spring-demo-annotations:一个简单的Spring注释演示

    在这个名为“spring-demo-annotations”的项目中,我们将深入探讨Spring框架中的注解(Annotation)特性,以及如何在实际应用中使用它们。此项目来源于一个Udemy课程,旨在通过实例帮助开发者理解和掌握Spring注解的...

    实验三实验指导书(2022春)1

    - **注解(Annotations)**:JUnit5 的核心在于其丰富的注解,例如 `@Test` 用于标记测试方法,`@Before` 和 `@After` 分别用于在每个测试方法之前和之后执行初始化和清理操作。此外,还有 `@BeforeEach` 和 `@After...

    cirrus-ci-annotations:解析和创建Cirrus CI批注

    Cirrus CI注释解析器 此模块可帮助Cirrus CI解析工件并找到相关注释以在GitHub UI中进行报告。...JUnit的XML Ruby Swift 以请求支持其他格式。 贡献 永远欢迎捐款! :party_popper: :raising_hands:

    mybatis使用注解方式简单实现的Demo

    import org.apache.ibatis.annotations.Select; public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User getUserById(int id); } ``` 在 MyBatis 配置文件(`mybatis-config.xml`...

    java测试框架的方法

    TestNG,即 Testing, Next Generation,下一代测试技术,是一套根据 JUnit 和 NUnit 思想而构建的利用注释来强化测试功能的一个测试框架。TestNG 设计涵盖所有类型的测试:单元,功能,端到端,集成等。 二、TestNG...

    eclipse工具使用说明

    **定义**:JUnit是一种常用的单元测试框架,其核心jar包通常被称为JUnit4。这个库包含了用于编写和执行单元测试的各种注解和方法,如@Before、@Test等。 **应用场景**:在软件开发过程中,为了确保代码的质量和稳定...

    TestNG:TestNg框架的说明和注释,数据提供者等

    TestNG是Java编程语言中的一款强大且功能丰富的自动化测试框架,与JUnit相比,它提供了更多的高级特性,使得测试更加灵活和高效。TestNG的核心设计理念是支持多种类型的测试,包括单元测试、集成测试以及端到端测试...

    Candidato-java-源码.rar

    为了深入理解这个源码,你需要逐个阅读类和方法,查看注释,理解类之间的关系,以及如何通过主程序(main方法)启动。此外,如果有文档或README文件,那将极大地帮助你了解源码的使用和目的。如果你是初学者,这将是...

    Java基础增强

    4. JUnit测试注解: - Before:在每个测试方法执行前运行。 - After:在每个测试方法执行后运行。 - BeforeClass:在所有测试开始前只执行一次。 - AfterClass:在所有测试结束后只执行一次。 5. Java集合框架...

Global site tag (gtag.js) - Google Analytics