Junit4 使用Fixtures

1.概述

测试Fixtures是一组对象的固定状态,用作运行测试的基准。测试Fixtures的目的是确保在众所周知的固定环境中进行测试,以便结果可重复。固定Fixtures示例:
  • 准备输入数据以及设置/创建伪造或模拟对象
  • 用一组已知的特定数据加载数据库
  • 复制一组特定的已知文件以创建测试Fixtures,将创建一组初始化为某些状态的对象。
JUnit提供注解,以便测试类可以在每个测试之前或之后运行Fixtures,或者一次在一个类中的所有测试方法之前和之后运行一次Fixtures。
Fixtures注解有四个:两个用于类级Fixtures,两个用于方法级Fixtures。在类级别,您具有@BeforeClass和@AfterClass,在方法(或测试)级别,您具有@Before和@After。

2. JUnit 4测试Fixtures示例

2.1 范例1:

/**
 * 一点教程网: http://www.yiidian.com
 */
public class CustomerTest {

  private Customer customer;
  private static final int ID = 1;
  private static final String FIRSTNAME = "Winston";
  private static final String LASTNAME = "Churchill";

  @BeforeEach
  public void setUp() {
    customer = new Customer(ID, FIRSTNAME, LASTNAME);
  }
}

2.2 范例2:

package test;

import java.io.Closeable;
import java.io.IOException;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
 * 一点教程网: http://www.yiidian.com
 */
public class TestFixturesExample {
  static class ExpensiveManagedResource implements Closeable {
    @Override
    public void close() throws IOException {}
  }

  static class ManagedResource implements Closeable {
    @Override
    public void close() throws IOException {}
  }

  @BeforeClass
  public static void setUpClass() {
    System.out.println("@BeforeClass setUpClass");
    myExpensiveManagedResource = new ExpensiveManagedResource();
  }

  @AfterClass
  public static void tearDownClass() throws IOException {
    System.out.println("@AfterClass tearDownClass");
    myExpensiveManagedResource.close();
    myExpensiveManagedResource = null;
  }

  private ManagedResource myManagedResource;
  private static ExpensiveManagedResource myExpensiveManagedResource;

  private void println(String string) {
    System.out.println(string);
  }

  @Before
  public void setUp() {
    this.println("@Before setUp");
    this.myManagedResource = new ManagedResource();
  }

  @After
  public void tearDown() throws IOException {
    this.println("@After tearDown");
    this.myManagedResource.close();
    this.myManagedResource = null;
  }

  @Test
  public void test1() {
    this.println("@Test test1()");
  }

  @Test
  public void test2() {
    this.println("@Test test2()");
  }
}

将输出类似以下内容:

@BeforeClass setUpClass
@Before setUp
@Test test2()
@After tearDown
@Before setUp
@Test test1()
@After tearDown
@AfterClass tearDownClass

2.3 范例3

当您拥有通用Fixtures时,可以执行以下操作:
  • 为Fixtures的每个部分添加一个字段
  • 使用@ org.junit.Before注解方法,并在该方法中初始化变量
  • 使用@ org.junit注释一个方法,然后释放您在setUp中分配的任何永久资源。例如,编写一些要使用12瑞士法郎,14瑞士法郎和28美元的不同组合的测试用例,首先创建Fixtures:
/**
 * 一点教程网: http://www.yiidian.com
 */
public class MoneyTest { 
    private Money f12CHF; 
    private Money f14CHF; 
    private Money f28USD; 
    
    @Before public void setUp() { 
        f12CHF= new Money(12, "CHF"); 
        f14CHF= new Money(14, "CHF"); 
        f28USD= new Money(28, "USD"); 
    }
}

2.4 例子4

import org.junit.*;
import static org.junit.Assert.*;
import java.util.*;
/**
 * 一点教程网: http://www.yiidian.com
 */
public class SimpleTest {
 
    private Collection<Object> collection;
 
    @Before
    public void setUp() {
        collection = new ArrayList<Object>();
    }
 
    @Test
    public void testEmptyCollection() {
        assertTrue(collection.isEmpty());
    }
 
 
    @Test
    public void testOneItemCollection() {
        collection.add("itemA");
        assertEquals(1, collection.size());
    }
}

在进行此测试后,这些方法可能会按以下顺序执行:

setUp()
testEmptyCollection()
setUp()
testOneItemCollection()
```

3.结论

在这篇文章中,我们学习了什么是Fixtures,它的用法和示例。 Fixtures注解有四个:两个用于类级Fixtures,两个用于方法级Fixtures。在类级别,您具有 @BeforeClass 和 @AfterClass ,在方法(或测试)级别,您具有 @Before 和 @After

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码