zoukankan      html  css  js  c++  java
  • 测试 | Mock object

     

    实例:

       

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

    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());
    				
    	}
    }
    

      

  • 相关阅读:
    Vmware15的安装以及Ubunt的在虚拟机上的安装
    MYSQL数据库查询索引
    SpringBoot和mybatis整合报错:Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 152; columnNumber: 10; 元素类型为 "mapper"
    idea中导包出现import org.apach.*,提交代码老出现冲突,不想使用.*的设置
    idea打断点后发现被标记的断点处那一行整行被标记了其他颜色,前面没有断点标识的红点
    Intellj IDEA 光标显示insert状态解决办法
    AngularJS 单元测试 Karma jasmine
    npm 及安装
    AngularJS 承诺 Promise
    AngularJS 路由及SPA理解
  • 原文地址:https://www.cnblogs.com/jj81/p/9939243.html
Copyright © 2011-2022 走看看