大致记录一下在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<Book> find(){
List<Book> list=new ArrayList<Book>();
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依赖
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
新建一个测试类 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<Book> 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<List<Book>> getMysqlBook() {
BookRepository bookRepository=new BookRepository();
List<Book> mysqlbook = bookRepository.find();
return ResponseEntity.ok(mysqlbook);
}
再用postman进行接口测试,肯定是没有什么问题的。

成功读取到数据库数据