網(wǎng)絡(luò)測(cè)試
這篇文章我們模擬一個(gè)場(chǎng)景:我們?cè)趯W(xué)校教務(wù)軟件中要獲取學(xué)生的信息,獲取方式有兩種第一種是通過(guò)本地?cái)?shù)據(jù)庫(kù)獲取,第二種是通過(guò)網(wǎng)絡(luò)獲取。
為此我們新建一個(gè)Student類來(lái)描述學(xué)生信息如下:
public class Student {
public int id ;
public String name;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
接下來(lái)我們建一個(gè)接口用來(lái)獲取學(xué)生的信息。
public interface StudentDao {
Student getStudentFromDB(int sid);
}
但是此時(shí)我們不去實(shí)現(xiàn)這個(gè)接口,因?yàn)楣ぷ鲿r(shí)很多情況都是分工合作,你做的功能需要?jiǎng)e人的配合,往往會(huì)影響開(kāi)發(fā)效率,那么我們?cè)撛趺慈y(cè)試自己的代碼呢,下面我們建立一個(gè)StuController類來(lái)控制是從何處獲取學(xué)生信息。
public class StuController {
private StudentDao studentDao;
public Student getStudentInfo(int sid){
Student student = null;
if(studentDao != null){
student = studentDao.getStudentFromDB(sid);
}
if(student == null){
student = fetchStudent(sid);
}
return student;
}
private Student fetchStudent(int sid) {
System.out.print("模擬網(wǎng)絡(luò)獲取學(xué)生信息");
Student student = new Student();
student.id = 12;
student.name = "網(wǎng)絡(luò)名";
return student;
}
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
}
以上代碼相信大家都能看懂,下面我們建立一個(gè)Student測(cè)試類
public class StuControllerTest {
StuController stuController;
StudentDao studentDao;
@Before
public void setUp() throws Exception {
stuController = new StuController();
studentDao = mock(StudentDao.class);
stuController.setStudentDao(studentDao);
}
@After
public void tearDown() throws Exception {
}
@Test
public void getStudentInfo() throws Exception {
Student returnStudent = new Student();
returnStudent.id = 123;
returnStudent.name = "Mock-user";
when(studentDao.getStudentFromDB(anyInt())).thenReturn(returnStudent);
Student student = stuController.getStudentInfo(123);
TestCase.assertEquals(123,student.id);
TestCase.assertEquals("Mock-user",student.name);
System.out.print(studentDao.getStudentFromDB(1));
}
@Test
public void testGetStudentInfoFromSever(){
when(studentDao.getStudentFromDB(anyInt())).thenReturn(null);
Student student = stuController.getStudentInfo(456);
TestCase.assertEquals(12,student.id);
TestCase.assertEquals("網(wǎng)絡(luò)名",student.name);
}
}
從上面代碼可以看到,我們并沒(méi)有實(shí)現(xiàn)StudentDao,我們只是應(yīng)用Mock 創(chuàng)建了一個(gè)studentDao的實(shí)例。
上面這個(gè)方法是測(cè)試數(shù)據(jù)庫(kù)獲取數(shù)據(jù)是否成功。
@Test
public void getStudentInfo() throws Exception {
而這個(gè)方法就是測(cè)試網(wǎng)絡(luò)數(shù)據(jù)是否獲取成功。
@Test
public void testGetStudentInfoFromSever(){
以下便是測(cè)試結(jié)果
image.png
本人不善言辭,但歡迎大家批評(píng)與指正。