测试CustomerDao为例子
public class CustomerDAO {
public boolean save(Customer customer) {
List<Object> args = new ArrayList<>();
args.add(customer.getName());
args.add(customer.getRealAge());
args.add(customer.getHeight());
String sql;
Integer id = customer.getId();
if ( id == null || id < 1) {
sql = "INSERT INTO customer(name, real_age, height) VALUES (?, ?, ?)";
} else {
sql = "UPDATE customer SET name = ?, real_age = ?, height = ? WHERE id = ?";
args.add(id);
}
return true;
}
/**
* 返回所有的customer数据
*
*/
public List<Customer> list() {
String sql = "SELECT id, name, real_age, height FROM customer";
return Dbs.getTpl().query(sql,new BeanPropertyRowMapper<>(Customer.class));
}
/**
* 根据id查找customer
*/
public Customer find(Integer id) {
String sql = "SELECT id, name, real_age, height FROM customer WHERE id = ?";
return Dbs.getTpl().queryForObject(sql, new BeanPropertyRowMapper<>(Customer.class), id);
}
/**
* 根据customer
*/
public boolean remove(Integer id) {
String sql = "DELETE FROM customer WHERE id = ?";
return Dbs.getTpl().update(sql,id) > 0;
}
}
复制代码
创建单元测试文件夹
和src同一个目录创建个test文件夹
然后test文件夹 右键 【Mark directory as】-- 【Test Resources Root】
- 创建文件CustomerDaoTest.
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CustomerDaoTest {
private static CustomerDAO dao;
@BeforeClass
public static void beforeClass() {
dao = new CustomerDAO();
System.out.println("beforeClass");
}
@AfterClass
public static void afterClass() {
System.out.println("afterClass");
}
@Before
public void before() {
System.out.println("before");
}
@After
public void after() {
System.out.println("after");
}
@Test
public void test_01_save() {
CustomerDAO d = new CustomerDAO();
Customer customer= new Customer();
customer.setName("张武");
customer.setRealAge(20);
customer.setHeight(1.89);
Assert.assertTrue(d.save(customer));
}
@Test
public void test_02_find() {
Assert.assertNotNull("find 测试不通过",dao.find(10));
}
@Test
public void test_03_list() {
List<Customer> customers = dao.list();
Assert.assertTrue("list 测试不通过",customers.size() > 0);
}
@Test
public void test_04_remove() {
Assert.assertTrue(dao.remove(10));
}
}
复制代码
执行顺序:beforeClass -- before -- test_01_save -- after -- before -- test_02_find -- after -- before -- test_03_list -- after -- before -- test_04_remove -- after -- afterClass
一般在before里创建资源,after释放,可以使每个方法使用的资源互不干扰。
要测试的方法执行顺序
@FixMethodOrder(MethodSorters.NAME_ASCENDING) 是控制测试的方法执行顺序。
-
MethodSorters.DEFAULT 默认 默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变。
-
MethodSorters.NAME_ASCENDING (推荐) 按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以test_NN_fun命名(NN表示测试方法序列号 01-99)如:test_01_bindByBadData、test_02_bindByCorrectData
-
MethodSorters.JVM 按JVM返回的方法名的顺序执行,此种方式下测试方法的执行顺序是不可预测的,即每次运行的顺序可能都不一样(JDK7里尤其如此).
执行
右键。或者
执行整个测试类
执行单个方法
快速创建
在任一方法右键 【Generate】--【Test...】