Spring JdbcTemplate Junit thí nghiệm - ResultSetExtractor/RowMapper

Văn chương kỹ càng tỉ mỉ miêu tả như thế nào sử dụng SpringJdbcTemplate tiến hành cơ sở dữ liệu thao tác, cũng phối hợp RowMapper cùng ResultSetExtractor tiến hành đơn nguyên thí nghiệm, cùng với lợi dụng Mockito bắt chước số liệu phản hồi. Thông qua ví dụ triển lãm như thế nào ở Junit thí nghiệm trung xử lý nhiều hành số liệu cùng bất đồng tuần tra tham số cảnh tượng.
Trích yếu từ CSDN thông qua trí năng kỹ thuật sinh thành

Spring JdbcTemplate Junit thí nghiệm bao trùm suất - lấy ResultSetExtractor / RowMapper vì lệ

1, RowMapper Mockito thí nghiệm

( 1 ) sáng tạo thật thể loại User

@Data
publicclassUser{

privateIntegerid;

privateStringname;

privateStringapplicant;

privateStringaddress;

privateBooleanflag;
}

( 2 ) JdbcTemplate nghiệp vụ số hiệu

importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.RowMapper;
importorg.springframework.stereotype.Repository;

importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.List;

@Repository
publicclassInsertGroup{

@Autowired
JdbcTemplatejdbcTemplate;

publicList<User>getUsers(Stringsql,Stringname,Stringaddress){

returnjdbcTemplate.query(sql,newRowMapper<User>(){
@Override
publicUsermapRow(ResultSetrs,introwNum)throwsSQLException{

Useruser=newUser();
user.setId(rs.getInt("ID"));
user.setName(rs.getString("Name"));
user.setApplicant(rs.getString("Applicant"));
user.setAddress(rs.getString("Address"));
user.setFlag(rs.getBoolean("Flag"));
returnuser;
}
},name,address);
}
}

( 3 ) Junit thí nghiệm

packagecom.example.dao;

importorg.junit.Assert;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.mockito.*;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.RowMapper;
importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;

importjava.sql.ResultSet;
importjava.util.ArrayList;
importjava.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
publicclassInsertGroupTest{

@Mock
JdbcTemplatejdbcTemplate;

@InjectMocks
InsertGroupinsertGroup;

@Before
publicvoidinit(){
MockitoAnnotations.openMocks(this);
}


@Test
publicvoidtest(){

/**
* yêu cầu chú ý chính là: invocation.getArgument(1)
* jdbcTemplate.query() trung Mock tham số hướng dẫn tra cứu này đây 0 bắt đầu, RowMapper là cái thứ hai nguyên tố, bởi vậy hướng dẫn tra cứu là 1, nếu là cái thứ ba vị trí, như vậy hướng dẫn tra cứu là 2, tức invocation.getArgument(2)
* đồng thời yêu cầu chú ý chính là, jdbcTemplate trung query phương pháp có rất nhiều, nhưng là truyền tham số là bất đồng, bởi vậy Mock tham số số lượng muốn căn cứ chính mình thực tế dùng đến query tham số vì chuẩn
*/
Mockito.when(jdbcTemplate.query(
ArgumentMatchers.anyString(),ArgumentMatchers.any(RowMapper.class),ArgumentMatchers.any()))
.thenAnswer((invocation)->{

RowMapper<User>rowMapper=(RowMapper<User>)invocation.getArgument(1);
ResultSetrs=Mockito.mock(ResultSet.class);

// Mock ResultSet to return one rows.
// Mockito.when(rs.getInt(ArgumentMatchers.eq( "ID" ))).thenReturn(506);

// Mock ResultSet to return two rows.
Mockito.when(rs.getInt(ArgumentMatchers.eq("ID")))
.thenReturn(412,300);
Mockito.when(rs.getString(ArgumentMatchers.eq("Name")))
.thenReturn("Lưu Diệc Phi","Lưu Thi Thi");
Mockito.when(rs.getBoolean(ArgumentMatchers.eq("Flag")))
.thenReturn(true,false);

List<User>users=newArrayList<>();
users.add(rowMapper.mapRow(rs,0));
users.add(rowMapper.mapRow(rs,1));

returnusers;
});

List<User>userList=insertGroup.getUsers("sql","1","2");

// Assert First Row
assertFirstUser(userList.get(0));

// Assert Second Row
assertSecondUser(userList.get(1));
}

publicvoidassertFirstUser(Useruser){
Assert.assertEquals(Integer.valueOf(412),user.getId());
Assert.assertEquals("Lưu Diệc Phi",user.getName());
Assert.assertTrue(user.getFlag());
}

publicvoidassertSecondUser(Useruser){
Assert.assertEquals(Integer.valueOf(300),user.getId());
Assert.assertEquals("Lưu Thi Thi",user.getName());
Assert.assertFalse(user.getFlag());
}
}
2, ResultSetExtractor Mockito thí nghiệm

( 1 ) sáng tạo User thật thể

importlombok.Data;

@Data
publicclassUser{

privateIntegerid;

privateStringname;

privateStringapplicant;

privateStringaddress;

privateBooleanflag;
}

( 2 ) JdbcTemplate nghiệp vụ số hiệu

publicList<User>getUsers2(Stringsql,Stringname,Stringaddress){

returnjdbcTemplate.query(sql,newResultSetExtractor<List<User>>(){
@Override
publicList<User>extractData(ResultSetrs)throwsSQLException,DataAccessException{
List<User>userList=newArrayList<>();
while(rs.next()){
Useruser=newUser();
user.setId(rs.getInt("ID"));
user.setName(rs.getString("Name"));
user.setApplicant(rs.getString("Applicant"));
user.setAddress(rs.getString("Address"));
user.setFlag(rs.getBoolean("Flag"));
userList.add(user);
}
returnuserList;
}
},name,address);
}

( 3 ) Junit thí nghiệm

@Test
publicvoidtest2(){
Mockito.when(jdbcTemplate.query(
ArgumentMatchers.anyString(),ArgumentMatchers.any(ResultSetExtractor.class),ArgumentMatchers.any()))
.thenAnswer((invocation)->{
ResultSetExtractor<List<User>>resultSetExtractor=
(ResultSetExtractor<List<User>>)invocation.getArgument(1);

ResultSetrs=Mockito.mock(ResultSet.class);

// two times it returns true and third time returns false.
Mockito.when(rs.next()).thenReturn(true,true,false);

// Mock ResultSet to return two rows.
Mockito.when(rs.getInt(ArgumentMatchers.eq("ID")))
.thenReturn(412,300);
Mockito.when(rs.getString(ArgumentMatchers.eq("Name")))
.thenReturn("Lưu Diệc Phi","Lưu Thi Thi");
Mockito.when(rs.getBoolean(ArgumentMatchers.eq("Flag")))
.thenReturn(true,false);

returnresultSetExtractor.extractData(rs);
});

List<User>users=insertGroup.getUsers2("sql","1","2");

Assert.assertEquals(Integer.valueOf(412),users.get(0).getId());
Assert.assertEquals("Lưu Diệc Phi",users.get(0).getName());
Assert.assertTrue(users.get(0).getFlag());
}
Bình luận
Tăng thêm bao lì xì

Thỉnh điền bao lì xì chúc phúc ngữ hoặc tiêu đề

Cái

Bao lì xì cái số nhỏ nhất vì 10 cái

Nguyên

Bao lì xì kim ngạch thấp nhất 5 nguyên

Trước mặt ngạch trống3.43Nguyên Đi trước nạp phí >
Cần chi trả:10.00Nguyên
Thành tựu một trăm triệu kỹ thuật người!
Lĩnh sau ngươi sẽ tự động trở thành bác chủ cùng bao lì xì chủ fans Quy tắc
hope_wisdom
Phát ra bao lì xì

Đánh thưởng tác giả

YD_1989

Ngươi cổ vũ sẽ là ta lớn nhất động lực

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
Quét mã chi trả:¥1
Thu hoạch trung
Quét mã chi trả

Ngài ngạch trống không đủ, thỉnh đổi mới quét mã chi trả hoặcNạp phí

Đánh thưởng tác giả

Thật phóNguyên
Sử dụng ngạch trống chi trả
Điểm đánh một lần nữa thu hoạch
Quét mã chi trả
Tiền bao ngạch trống 0

Để khấu thuyết minh:

1. Ngạch trống là tiền bao nạp phí giả thuyết tiền, dựa theo 1:1 tỉ lệ tiến hành chi trả kim ngạch để khấu.
2. Ngạch trống vô pháp trực tiếp mua sắm download, có thể mua sắm VIP, trả phí chuyên mục cập chương trình học.

Ngạch trống nạp phí