实例:

  

一个简单的图书管理系统包括三个类:

  1. Book提供了书籍的定义
  2. BookService提供了有关书籍借阅和归还的服务
  3. BookMananger查找书籍并把对书籍状态的更改更新到数据库中

目前,Book类和Bookservice类都已完成,但BookManager只是一个接口,对它的实现还没有完成。

目标: 对BookService类中的borrowBook和returnBook两个方法进行单元测试的代码,要求使用EasyMock模拟BookManager对象。

package org.demo.test.library;

public class Book {
private String name;
private String isbn; //书号
private double price;
private boolean inShell; // 是否在架上 public Book(){}
public Book(String name, String isbn, double price,
boolean inShell){
this.name = name;
this.isbn = isbn;
this.price = price;
this.inShell = inShell;
} /**
* get set方法省略
**/
public boolean isInShell(){
return this.inShell;
}
public void setInShell(boolean inShell){
this.inShell = inShell;
} }

  

package org.demo.test.library;

public class BookService {
private BookManager bookManager; public BookService(BookManager bookManager){
this.bookManager = bookManager;
} public boolean borrowBook (String isbn){
Book book = bookManager.findBook(isbn);
if (book != null && book.isInShell()){
//修改shell值
book.setInShell(false);
bookManager.updateBook(book);
return true;
}
return false;
}
public boolean returnBook (String isbn){
Book book = bookManager.findBook(isbn);
if (book != null && !book.isInShell()){
book.setInShell(true);
return true;
}
return false;
} }

  

package org.demo.test.library;

public interface BookManager {
Book findBook(String isbn); // 根据isbn在数据库中找到相应的书籍
void updateBook(Book book); // 更新数据库中书籍的状态
}

  

package org.demo.test.library;

import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.*; import org.demo.test.account.AccountManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.ExpectedException; public class BookServiceTest { private BookManager bookManager;
private BookService bookService; @Before
public void setUp() throws Exception {
bookManager = createMock("bookManager",BookManager.class); bookService = new BookService(bookManager); } @Test
public void testBorrowBook() {
Book book1 = new Book("Java","123",20.2,true);
Book book2 = new Book("Web","124",20.9,false);
Book book3 = new Book("JavaScript","125",20.9,false); bookManager.updateBook(book1);
bookManager.updateBook(book2); /**
* 定义查询接口返回值
*/
expect(bookManager.findBook("123")).andReturn(book1);
expect(bookManager.findBook("124")).andReturn(book2);
expect(bookManager.findBook("126")).andReturn(null); /**
*
*/
replay(bookManager); /**
* 执行测试
*/
bookService.borrowBook("123");
bookService.borrowBook("124");
bookService.borrowBook("126"); assertEquals(false, book1.isInShell());
assertEquals(false, book2.isInShell());
} @Test
public void testReturnBook() {
Book book1 = new Book("Java","123",20.2,true);
Book book2 = new Book("Web","124",20.9,false); bookManager.updateBook(book1);
bookManager.updateBook(book2); expect(bookManager.findBook("123")).andReturn(book1);
expect(bookManager.findBook("124")).andReturn(book2);
expect(bookManager.findBook("126")).andReturn(null); replay(bookManager); bookService.returnBook("123");
bookService.returnBook("124");
bookService.returnBook("126"); assertEquals(true, book1.isInShell());
assertEquals(true, book2.isInShell()); }
}

  

最新文章

  1. iOS 打电话、发短信、邮件、打开网址、调用应用等合集
  2. bootstrap学习总结-03 常用标签1
  3. Code Contracts for .NET
  4. HTML5之sessionStorage
  5. 微信用户授权,取openid
  6. Centos环境下部署游戏服务器-软件安装
  7. amoeba实现MySQL读写分离
  8. mysql学习笔记3
  9. [转载]做一个 App 前需要考虑的几件事
  10. Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用
  11. python 连接Mysql数据库
  12. 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中
  13. VS2010中的sln,suo分别是什么文件
  14. 一个小公式帮你轻松将IP地址从10进制转到2进制
  15. swift 该死的派发机制--待完成
  16. 数据库恢复(database restore)之兵不血刃——半小时恢复客户数据库
  17. 代码:PC 链接列表面板border的一种做法(每行之间有分割线)
  18. HttpClient(三)-- 抓取图片
  19. Core - Provide an easy way to store administrator and user model differences in a custom store (e.g., in a database)
  20. python的if条件语句的语法和案例

热门文章

  1. 远程请求json数据,list中显示
  2. uboot之logo显示【转】
  3. linux内核段属性机制【转】
  4. android读取apk中已经存在的数据库信息
  5. Java(一)——认识Java语言
  6. 【转载】如何在 C#中访问 JavaScript函数?
  7. python 基础之第十三天(xineted服务器,forking,多线程)
  8. python print 字体颜色
  9. HDU2190
  10. sip协议呼叫流程详解