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
相关推荐
4. **超时测试**:通过@Test注解的timeout属性,可以设定测试方法的执行时间限制。如果超过这个时间限制,测试将被视为失败,这对于检测可能的死循环非常有用。 5. **断言增强**:JUnit提供了丰富的断言方法,如...
JUnit 还提供了注解来控制测试执行的特性,比如 `@Ignore` 可以忽略某个测试,`@Test(timeout = ...)` 可以设置测试方法的超时时间。更高级的特性如参数化测试(`@Parameterized`)允许用不同的参数多次执行同一测试...
@Test注解的timeout属性可以设定超时时间: ```java @Test(timeout = 1000) public void testTimeout() { // ... } ``` 如果testTimeout方法超过1000毫秒未完成,Junit4将自动中止并报告测试失败。 总结,Junit4...
你可以在这个注解上添加`expected`属性来指定预期的异常,或者`timeout`属性来限制方法的执行时间。 2. `@Before`: 这个注解标记的方法会在每个测试方法执行之前运行,通常用于初始化测试所需的环境或数据。 3. `@...
例如,`@Parameters`注解可以用于实现参数化的测试数据,`@Test(timeout = 1000)`可以设置测试方法的执行时间限制。 通过这两个子文件夹,我们可以学习到JUnit从3到4的演进,以及如何在实际项目中编写和组织测试...
例如,`assertEquals(expected, actual)`用于检查两个对象是否相等。 4. **忽略测试**:有时我们可能需要暂时跳过某个测试,可以使用`@Ignore`注解来实现。这通常在测试未完成或出现临时问题时使用。 5. **异常...
- `@Before` 和 `@After`:这两个注解的方法会在每个测试用例之前和之后运行,通常用来设置测试环境和清理资源。 - `@BeforeClass` 和 `@AfterClass`:这些方法在整个测试类执行之前和之后运行一次,适合初始化和...
- @Test标识测试方法,可以包含预期异常(@Expected)或超时(@Test(timeout))设置。- @Before和@After在每个测试方法前后的执行,用于初始化和清理工作。- @BeforeClass和@AfterClass则在所有测试之前和之后运行,通常...
2. **@Test注解**:如前所述,`@Test`注解是定义测试方法的关键。可以将其添加到任何public方法上,JUnit测试框架会自动检测并运行这些方法。如果方法中发生未捕获的异常,那么测试将失败。 3. **断言(Assertions)*...
4. **超时测试**:`@Test(timeout = 1000)`可以设置测试方法的执行时间限制,超时则视为失败。 5. **分类(Categories)**:使用`@Category`注解,可以将测试分为不同的类别,方便按需运行。 6. **规则(Rules)**...
可以包含`expected`属性来指定预期的异常类型,或者`timeout`属性设置超时限制。 2. **断言(Assertions)**: - `assertEquals()`:检查两个对象或值是否相等。有多种重载形式,如处理基本类型、字符串、数组和...
5. **超时测试**:使用@Test注解的timeout属性可以设定测试方法的执行时间限制,超过时间则认为测试失败。 四、实战应用 在实际项目中,我们常常会结合Mockito等工具进行模拟对象的测试,以隔离依赖并专注于单个...
2. `@Before` 和 `@After`:这两个注解分别表示在每个测试方法之前和之后执行的方法。通常用于设置测试环境(如创建对象、初始化数据)和清理工作(如释放资源、清理数据)。 3. `@BeforeClass` 和 `@AfterClass`:...
6. **超时测试**:@Test注解的timeout属性可以设置测试方法的执行时间限制,如果超过这个时间,测试将失败。 7. **假对象和存根**:JUnit通常与其他Mocking框架(如Mockito)结合使用,以便在测试中替换真实对象,...
3. **异常测试**:可以通过@Test注解的expected属性来预期一个方法应该抛出特定类型的异常。 4. **测试套件**:通过@Suite注解,可以组合多个测试类在一个测试套件中执行。 5. **固定顺序执行**:使用@...
3. **超时测试**:使用@Test注解的timeout属性,可以设置方法执行的最大时间。如果超过设定时间还未结束,测试将失败。 4. **规则(Rules)**:JUnit4引入了Rule概念,允许自定义测试行为,如资源管理、日志记录等...
3. **异常测试**:`@Test`注解的`expected`属性可以用来检查方法是否抛出了预期的异常。 4. **断言(Assertions)**:JUnit 提供了丰富的断言方法,如`assertEquals`,`assertTrue`,`assertNull`等,用于验证程序...
- `@Before`和`@After`:这两个注解的方法会在每个测试方法之前和之后执行,通常用于初始化和清理工作。 - `@BeforeClass`和`@AfterClass`:此类级别的方法,只在测试类的生命周期内执行一次,适用于需要全局初始...
5. **测试超时**:通过@Test注解的timeout属性,可以设定测试方法的最大执行时间,超过这个时间限制就会失败,防止无限循环或长时间运行的测试阻塞其他测试。 6. **规则(Rules)**:JUnit 4.12引入了规则的概念,...
例如,我们可以使用@Test注解来标记一个方法作为测试方法,而@After和@Before则可以用来定义在每个测试前后执行的设置和清理操作。 在实际应用中,我们可能会遇到以下Junit的核心知识点: 1. **测试注解**: - `@...