@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
分享到:
相关推荐
- **注解(Annotations)**:JUnit 4开始大量使用注解(如@Test、@Before、@After、@Ignore等),使得测试类的结构更加简洁,减少了元编程的需求。 - **参数化测试(Parameterized Tests)**:允许用不同的参数多次...
用于扩展 JUnit 测试的注释 Eclipse 插件的更新站点 URL:jar: : 注释 jar 的下载 URL: 例子 package test; import gh.funthomas424242.junitsupport.annotations.TestSuite; public class TestSuiteDefinition ...
junit-report-annotations-action 创建构建信息的注释,并将前n个失败的测试作为单独的注释列出 例子 - uses: ashley-taylor/junit-report-annotations-action@1.3 if: always() with: access-token: ${{ ...
3. **测试注解(Annotations)**:虽然JUnit 3不支持注解,但其后的版本(如JUnit 4和JUnit 5)引入了注解,使得测试更加简洁。例如,`@Test`注解标识一个方法为测试方法,`@Before`和`@After`注解分别表示在所有...
1. **注解(Annotations)**:JUnit 4.9大量使用了Java注解,如`@Test`用于标记测试方法,`@Before`和`@After`用于定义在每个测试方法执行前后的准备工作和清理工作,`@BeforeClass`和`@AfterClass`则是在所有测试...
4. 编写可读性强的测试:JUnit支持使用注释和自定义断言,使得测试代码易于理解和维护。 5. 参数化测试:通过`@Parameterized`注解,可以对一组输入数据执行相同的测试逻辑,以覆盖多种情况。 四、JUnit与源码分析...
1. **注解(Annotations)**:JUnit 4.8.2引入了注解,如`@Test`、`@Before`、`@After`等,使得测试代码更加简洁、易读。`@Test`用于标记测试方法,`@Before`和`@After`则分别表示在每个测试方法之前和之后执行的...
此外,4.12版本引入了注解(Annotations)的概念,例如@Test,这使得测试代码更加整洁,更易于理解。只需在测试方法前添加@Test注解,JUnit就会自动识别并执行该方法。 除了基本的断言和测试注解,JUnit 4.12还支持...
在JUnit 4.12版本中,引入了"类别注释"(Category Annotations)的概念,这允许我们更灵活地组织和执行测试用例。本示例项目“junit4.12-categories-configuration-sample”深入探讨了如何结合类别注释和封闭注释...
4. **Javadoc注释**:用于生成API文档的注释,通常以`/** ... */`形式出现,包含在方法、类或接口声明之前,可以包含HTML标签以提高可读性。 5. **运行时注解**:通过`@Retention(RetentionPolicy.RUNTIME)`,注解...
在这个名为“spring-demo-annotations”的项目中,我们将深入探讨Spring框架中的注解(Annotation)特性,以及如何在实际应用中使用它们。此项目来源于一个Udemy课程,旨在通过实例帮助开发者理解和掌握Spring注解的...
- **注解(Annotations)**:JUnit5 的核心在于其丰富的注解,例如 `@Test` 用于标记测试方法,`@Before` 和 `@After` 分别用于在每个测试方法之前和之后执行初始化和清理操作。此外,还有 `@BeforeEach` 和 `@After...
Cirrus CI注释解析器 此模块可帮助Cirrus CI解析工件并找到相关注释以在GitHub UI中进行报告。...JUnit的XML Ruby Swift 以请求支持其他格式。 贡献 永远欢迎捐款! :party_popper: :raising_hands:
import org.apache.ibatis.annotations.Select; public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User getUserById(int id); } ``` 在 MyBatis 配置文件(`mybatis-config.xml`...
TestNG,即 Testing, Next Generation,下一代测试技术,是一套根据 JUnit 和 NUnit 思想而构建的利用注释来强化测试功能的一个测试框架。TestNG 设计涵盖所有类型的测试:单元,功能,端到端,集成等。 二、TestNG...
**定义**:JUnit是一种常用的单元测试框架,其核心jar包通常被称为JUnit4。这个库包含了用于编写和执行单元测试的各种注解和方法,如@Before、@Test等。 **应用场景**:在软件开发过程中,为了确保代码的质量和稳定...
TestNG是Java编程语言中的一款强大且功能丰富的自动化测试框架,与JUnit相比,它提供了更多的高级特性,使得测试更加灵活和高效。TestNG的核心设计理念是支持多种类型的测试,包括单元测试、集成测试以及端到端测试...
为了深入理解这个源码,你需要逐个阅读类和方法,查看注释,理解类之间的关系,以及如何通过主程序(main方法)启动。此外,如果有文档或README文件,那将极大地帮助你了解源码的使用和目的。如果你是初学者,这将是...
4. JUnit测试注解: - Before:在每个测试方法执行前运行。 - After:在每个测试方法执行后运行。 - BeforeClass:在所有测试开始前只执行一次。 - AfterClass:在所有测试结束后只执行一次。 5. Java集合框架...