JUtil单元测试

测试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) 是控制测试的方法执行顺序。

  1. MethodSorters.DEFAULT 默认 默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变。

  2. MethodSorters.NAME_ASCENDING (推荐) 按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以test_NN_fun命名(NN表示测试方法序列号 01-99)如:test_01_bindByBadData、test_02_bindByCorrectData

  3. MethodSorters.JVM 按JVM返回的方法名的顺序执行,此种方式下测试方法的执行顺序是不可预测的,即每次运行的顺序可能都不一样(JDK7里尤其如此).

执行

右键。或者

image.png
执行整个测试类

image.png
执行单个方法

快速创建

在任一方法右键 【Generate】--【Test...】

image.png

Guess you like

Origin juejin.im/post/7046926770011897887