Junit4 使用Fixtures
精华
小牛编辑
103浏览
2023-03-14
1.概述
测试Fixtures是一组对象的固定状态,用作运行测试的基准。测试Fixtures的目的是确保在众所周知的固定环境中进行测试,以便结果可重复。固定Fixtures示例:
- 准备输入数据以及设置/创建伪造或模拟对象
- 用一组已知的特定数据加载数据库
- 复制一组特定的已知文件以创建测试Fixtures,将创建一组初始化为某些状态的对象。
JUnit提供注解,以便测试类可以在每个测试之前或之后运行Fixtures,或者一次在一个类中的所有测试方法之前和之后运行一次Fixtures。
Fixtures注解有四个:两个用于类级Fixtures,两个用于方法级Fixtures。在类级别,您具有@BeforeClass和@AfterClass,在方法(或测试)级别,您具有@Before和@After。
2. JUnit 4测试Fixtures示例
2.1 范例1:
/**
* 小牛知识库网: https://www.xnip.cn
*/
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;
/**
* 小牛知识库网: https://www.xnip.cn
*/
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:
/**
* 小牛知识库网: https://www.xnip.cn
*/
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.*;
/**
* 小牛知识库网: https://www.xnip.cn
*/
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