我的Spring boot的Demo2(JUnit单元测试,连接mysql )

大致记录一下在spring boot 上使用JUnit进行测试的过程。为自己以后翻看备用。
关于JUint的相关介绍,参考我的Junit调研学习
https://www.jianshu.com/p/36da918d613f

建立web与MySQL数据库的连接

先在MySQL上建立好一个简单的数据库和表。


建立的数据库和book表如图所示

然后建立能够连接和关闭mysql数据库的 MysqlManger 。

import java.sql.*;

public class MysqlManger {
    private  static Connection conn = null;
    private PreparedStatement ps = null;
    private ResultSet rs = null;

    public static  Connection getConn() {
        String url = "jdbc:mysql://localhost:3306/junitdemo";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            try {
                conn = (Connection) DriverManager.getConnection(url, "root",
                        "123456");
            } catch (SQLException e) {
                System.out.println(e.getMessage());
            }
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        return conn;
    }

    public void close() {
        try {
            rs.close();
            ps.close();
            conn.close();
        } catch (SQLException e) {
            e.getMessage();
        }
    }
}

然后再建立 BookRepository 负责从 junitdemo 数据库里面获取 book 信息。


import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.sql.*;

public class BookRepository {
    Connection conn=null;
    PreparedStatement ps=null;
    ResultSet rs=null;

    public List find(){
        List list=new ArrayList();
        String sql="select * from  book ";
        conn= MysqlManger.getConn();
        try {
            ps=(PreparedStatement) conn.prepareStatement(sql);
            rs=ps.executeQuery();
            while (rs.next()) {
                Book book=new Book();
                book.setName(rs.getString(2));
                book.setDescription(rs.getString(3));
                list.add(book);

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }
}

junit进行测试

在maven上添加junit5依赖

        
            org.junit.jupiter
            junit-jupiter
            ${junit-jupiter.version}
            test
        

新建一个测试类 BookTest

import com.example.junitdemo.domain.Book;
import com.example.junitdemo.domain.BookRepository;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class BookTest {

    //表示被注解的方法应该在当前类的所有@Test
    // @RepeatedTest,@ParameterizedTest和@TestFactory方法之前执行
    @BeforeAll
    public static void setUpBeforeClass() throws Exception {
    }


    /**
     * Test method for {@link com.example.junitdemo.domain.BookRepository#find()}.
     */
    @Test
    public void testFind() {
        BookRepository bookRepository=new BookRepository();
        List  list = bookRepository.find();
        for (int i = 0; i < list.size(); i++) {
            Book book=list.get(i);
            System.out.println("名称: "+book.getName()+" 描述: "+book.getDescription());

        }
    }

    @Test
    @DisplayName("测试是否查到的为第一本书 ")
    public void testFindById(){
        BookRepository bookRepository=new BookRepository();
        Book book = bookRepository.fineById(1);
        assertEquals("book1", book.getName());
    }

    //表示被注解的方法应该在当前类的所有@Test...方法之后执行;
    @AfterAll
    public static void tearDownAfterClass() throws Exception {
    }
}

这里主要是写了两个测试方法。
第一个 testFind()可以从表中查询所有书籍信息。


成功读取了全部数据

第二个 testFindById(),该测试方法是测试是否能够根据id查到对应的书籍。
@DisplayName可以展现测试方法的自定义名称。
使用到了junit一个最简单的断言assertEquals("book1", book.getName());来判断,如果查询到的book的名字是“book1”,那么就表示正确。

测试成功

如果改为assertEquals("book2", book.getName());

则会告知失败原因。

web测试

测试成功后便可以在BookController使用该方法。
在BookController中添加新的get请求来获取mysql数据库中所有book信息

  @GetMapping("/mysqlbook")
    public ResponseEntity> getMysqlBook() {
        BookRepository bookRepository=new BookRepository();
        List  mysqlbook = bookRepository.find();
        return ResponseEntity.ok(mysqlbook);
    }

再用postman进行接口测试,肯定是没有什么问题的。

成功读取到数据库数据

你可能感兴趣的:(我的Spring boot的Demo2(JUnit单元测试,连接mysql ))