Java Mocking入门—使用Mockito

我们都会编写单元测试程序,但我们当前所面临的挑战是被测单元可能依赖于其他组件。而对于单元测试配置其他组件,绝对是过枉矫正。相反,我们可以使用Mocks框架代替其他组件,继续进行单元测试。

为了展现如何使用mock框架,我编写一个数据访问层(DAL),该类对应用提供了一套API 接口来访问和修改数据库中的数据。之后在不需要连接数据库的情况下,对DAL类进行单元测试。数据库可以是本地数据库、远程数据库、文件系统或者任何可以储存和检索数据的地方。使用DAL类帮助我们 将数据映射操作从应用代码中分离出来。

使用maven建立一个Java工程。

mvn archetype:generate -DgroupId=info.sanaulla -DartifactId=MockitoDemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
以上操作建立了一个MockitoDemo文件夹,然后创建源文件和测试文件的整个目录结构。

考虑下面这个示例模型类:
package info.sanaulla.models;

import java.util.List;

/**
* Model class for the book details.
*/
public class Book {

private String isbn;
private String title;
private List authors;
private String publication;
private Integer yearOfPublication;
private Integer numberOfPages;
private String image;

public Book(String isbn,
String title,
List authors,
String publication,
Integer yearOfPublication,
Integer numberOfPages,
String image){

this.isbn = isbn;
this.title = title;
this.authors = authors;
this.publication = publication;
this.yearOfPublication = yearOfPublication;
this.numberOfPages = numberOfPages;
this.image = image;

}

public String getIsbn() {
return isbn;
}

public String getTitle() {
return title;
}

public List getAuthors() {
return authors;
}

public String getPublication() {
return publication;
}

public Integer getYearOfPublication() {
return yearOfPublication;
}

public Integer getNumberOfPages() {
return numberOfPages;
}

public String getImage() {
return image;
}
}
操作Book模型类的DAL类:

package info.sanaulla.dal;

import info.sanaulla.models.Book;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
* API layer for persisting and retrieving the Book objects.
*/
public class BookDAL {

private static BookDAL bookDAL = new BookDAL();

public List getAllBooks(){
return Collections.EMPTY_LIST;
}

public Book getBook(String isbn){
return null;
}

public String addBook(Book book){
return book.getIsbn();
}

public String updateBook(Book book){
return book.getIsbn();
}

public static BookDAL getInstance(){
return bookDAL;
}
}
当前DAL层以上没有任何功能,我们将对这段代码TDD进行单元测试。DAL层可能与ORM映射API或者数据库API通讯,而我们不关心的这些API是如何设计的。

测试驱动DAL层

对单元测试和Java Mock有很多框架,对这个例子,我将选择JUnit做单元测试,Mockito作为Java mock。我们会在Maven的pom.xml文件中更新依赖属性。

使用maven命令: mvn test进行测试。输出如下:

T E S T S

Running info.sanaulla.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec
Running info.sanaulla.dal.BookDALTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.209 sec

Results :

Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
至此,通过使用mock框架,在不用实际配置数据源的情况下,就可以测试DAL类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值