`

Test注解的两个属性:expected和timeout

阅读更多

JUnit4:Test文档中的解释:

  The Test annotation supports two optional parameters.

  The first, expected, declares that a test method should throw an exception.

  If it doesn't throw an exception or if it throws a different exception than the one declared, the test fails.

  For example, the following test succeeds:

@Test(expected=IndexOutOfBoundsException.class) 
public void outOfBounds() 
{
    new ArrayList<Object>().get(1);
}

  The second optional parameter, timeout, causes a test to fail if it takes longer than a specified amount of clock time (measured in milliseconds).

  The following test fails:

@Test(timeout=100) 
public void infinity() 
{
    while(true);
}

  文档中说得比较清楚,下面再结合之前加减乘除的例子重复地解释一下,以作巩固。

expected属性

  用来指示期望抛出的异常类型。

  比如除以0的测试:

@Test(expected = Exception.class)
public void testDivide() throws Exception
{
       cal.divide(1, 0);
}

  抛出指定的异常类型,则测试通过 。

  如果除数改为非0值,则不会抛出异常,测试失败,报Failures。

timeout属性

  用来指示时间上限。

  比如把这个属性设置为100毫秒:

@Test(timeout = 100)

  当测试方法的时间超过这个时间值时测试就会失败。(注意超时了报的是Errors,如果是值错了是Failures)。

 

附上程序例子:

  其中让加法的时间延迟500毫秒。

package com.bijian.study;

public class Calculator
{
    public int add(int a, int b)
    {
        try
        {
            Thread.sleep(500);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        return a + b;
    }

    public int subtract(int a, int b)
    {
        return a - b;
    }

    public int multiply(int a, int b)
    {
        return a * b;
    }

    public int divide(int a, int b) throws Exception
    {
        if (0 == b)
        {
            throw new Exception("除数不能为0");
        }
        return a / b;
    }
}

测试类代码:

  加法方法测试加入了时间限制,导致超过时间时发生错误。

  加入了除法除以零的抛出异常测试。

package com.bijian.study;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class CalculatorTest {
	
	private Calculator cal = null;

	@BeforeClass
	public static void globalInit() {
		System.out.println("global Init invoked!");
	}

	@AfterClass
	public static void globalDestroy() {
		System.out.println("global Destroy invoked!");
	}

	@Before
	public void init()// setUp()
	{
		cal = new Calculator();
		System.out.println("init --> cal: " + cal);
	}

	@After
	public void destroy()// tearDown()
	{
		System.out.println("destroy");
	}

	@Test(timeout = 1000)
	public void testAdd() {
		System.out.println("testAdd");
		int result = cal.add(3, 5);
		assertEquals(8, result);
	}

	@Test
	public void testSubtract() {
		System.out.println("testSubtract");
		int result = cal.subtract(1, 6);
		assertEquals(-5, result);
	}

	@Test
	public void testMultiply() {
		System.out.println("testMultiply");
		int result = cal.multiply(5, 9);
		assertEquals(45, result);
	}

	@Test(expected = Exception.class)
	public void testDivide() throws Exception {
		cal.divide(1, 0);
	}
}

 

文章来源:http://www.cnblogs.com/mengdd/archive/2013/04/13/3019278.html

分享到:
评论

相关推荐

    Java单元测试JUnit4.7

    4. **超时测试**:通过@Test注解的timeout属性,可以设定测试方法的执行时间限制。如果超过这个时间限制,测试将被视为失败,这对于检测可能的死循环非常有用。 5. **断言增强**:JUnit提供了丰富的断言方法,如...

    junit common test case just for my test

    JUnit 还提供了注解来控制测试执行的特性,比如 `@Ignore` 可以忽略某个测试,`@Test(timeout = ...)` 可以设置测试方法的超时时间。更高级的特性如参数化测试(`@Parameterized`)允许用不同的参数多次执行同一测试...

    Junit4的应用案例

    @Test注解的timeout属性可以设定超时时间: ```java @Test(timeout = 1000) public void testTimeout() { // ... } ``` 如果testTimeout方法超过1000毫秒未完成,Junit4将自动中止并报告测试失败。 总结,Junit4...

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

    你可以在这个注解上添加`expected`属性来指定预期的异常,或者`timeout`属性来限制方法的执行时间。 2. `@Before`: 这个注解标记的方法会在每个测试方法执行之前运行,通常用于初始化测试所需的环境或数据。 3. `@...

    JUnitTest.rar

    例如,`@Parameters`注解可以用于实现参数化的测试数据,`@Test(timeout = 1000)`可以设置测试方法的执行时间限制。 通过这两个子文件夹,我们可以学习到JUnit从3到4的演进,以及如何在实际项目中编写和组织测试...

    JUnit_Test_Code.zip_JUnit_JUnit测试_junit测试脚本

    例如,`assertEquals(expected, actual)`用于检查两个对象是否相等。 4. **忽略测试**:有时我们可能需要暂时跳过某个测试,可以使用`@Ignore`注解来实现。这通常在测试未完成或出现临时问题时使用。 5. **异常...

    Junit4 Test 单元测试

    - `@Before` 和 `@After`:这两个注解的方法会在每个测试用例之前和之后运行,通常用来设置测试环境和清理资源。 - `@BeforeClass` 和 `@AfterClass`:这些方法在整个测试类执行之前和之后运行一次,适合初始化和...

    junit使用简明手册.rar

    - @Test标识测试方法,可以包含预期异常(@Expected)或超时(@Test(timeout))设置。- @Before和@After在每个测试方法前后的执行,用于初始化和清理工作。- @BeforeClass和@AfterClass则在所有测试之前和之后运行,通常...

    Junit_test.rar_JUnit_JUnit测试_junit工具 @test

    2. **@Test注解**:如前所述,`@Test`注解是定义测试方法的关键。可以将其添加到任何public方法上,JUnit测试框架会自动检测并运行这些方法。如果方法中发生未捕获的异常,那么测试将失败。 3. **断言(Assertions)*...

    junit3.8 和junit4 api

    4. **超时测试**:`@Test(timeout = 1000)`可以设置测试方法的执行时间限制,超时则视为失败。 5. **分类(Categories)**:使用`@Category`注解,可以将测试分为不同的类别,方便按需运行。 6. **规则(Rules)**...

    Junit的api

    可以包含`expected`属性来指定预期的异常类型,或者`timeout`属性设置超时限制。 2. **断言(Assertions)**: - `assertEquals()`:检查两个对象或值是否相等。有多种重载形式,如处理基本类型、字符串、数组和...

    在woyo写的Junit4培训讲义

    5. **超时测试**:使用@Test注解的timeout属性可以设定测试方法的执行时间限制,超过时间则认为测试失败。 四、实战应用 在实际项目中,我们常常会结合Mockito等工具进行模拟对象的测试,以隔离依赖并专注于单个...

    注解的在junit总的使用模拟.rar

    2. `@Before` 和 `@After`:这两个注解分别表示在每个测试方法之前和之后执行的方法。通常用于设置测试环境(如创建对象、初始化数据)和清理工作(如释放资源、清理数据)。 3. `@BeforeClass` 和 `@AfterClass`:...

    JUnit测试源码

    6. **超时测试**:@Test注解的timeout属性可以设置测试方法的执行时间限制,如果超过这个时间,测试将失败。 7. **假对象和存根**:JUnit通常与其他Mocking框架(如Mockito)结合使用,以便在测试中替换真实对象,...

    junit jar包

    3. **异常测试**:可以通过@Test注解的expected属性来预期一个方法应该抛出特定类型的异常。 4. **测试套件**:通过@Suite注解,可以组合多个测试类在一个测试套件中执行。 5. **固定顺序执行**:使用@...

    Junit4电子教程 api

    3. **超时测试**:使用@Test注解的timeout属性,可以设置方法执行的最大时间。如果超过设定时间还未结束,测试将失败。 4. **规则(Rules)**:JUnit4引入了Rule概念,允许自定义测试行为,如资源管理、日志记录等...

    junit4 测试jar包

    3. **异常测试**:`@Test`注解的`expected`属性可以用来检查方法是否抛出了预期的异常。 4. **断言(Assertions)**:JUnit 提供了丰富的断言方法,如`assertEquals`,`assertTrue`,`assertNull`等,用于验证程序...

    junit4基础教程

    - `@Before`和`@After`:这两个注解的方法会在每个测试方法之前和之后执行,通常用于初始化和清理工作。 - `@BeforeClass`和`@AfterClass`:此类级别的方法,只在测试类的生命周期内执行一次,适用于需要全局初始...

    Junit-4.12

    5. **测试超时**:通过@Test注解的timeout属性,可以设定测试方法的最大执行时间,超过这个时间限制就会失败,防止无限循环或长时间运行的测试阻塞其他测试。 6. **规则(Rules)**:JUnit 4.12引入了规则的概念,...

    junit测试小demo

    例如,我们可以使用@Test注解来标记一个方法作为测试方法,而@After和@Before则可以用来定义在每个测试前后执行的设置和清理操作。 在实际应用中,我们可能会遇到以下Junit的核心知识点: 1. **测试注解**: - `@...

Global site tag (gtag.js) - Google Analytics