【自動化試験】EasyMockユニット試験使用記録

25115 ワード

メソッドをテストするときに、メソッド内でオブジェクトを使用する必要がありますが、このオブジェクトの取得は適切に不確定な要素であり、このオブジェクトの値を返すにはコードの実行に長い時間がかかる可能性があります.また、現在は存在しない可能性もあります.将来は存在します.例えば、タイミングタスクのようなものもあります.取得は非常に複雑である可能性があります.この場合、このオブジェクトをシミュレートしてから、正常な論理に従う必要があります.この偽のオブジェクトをこの方法が正常に論理的に行われているかどうかをテストし、このオブジェクトの取得は単独でテスト例でチェックします.Mock法はユニット試験でよく見られる技術であり,その主な役割は応用において容易に構築されないまたは複雑なオブジェクトをシミュレートし,試験を試験境界以外のオブジェクトから隔離することである.
EasyMockは、特定のインタフェースに対して簡単な方法でMockオブジェクトを生成するためのクラスライブラリです.インタフェースのシミュレーションを提供し、録音、再生、チェックの3つのステップで大体のテストプロセスを完了することができ、メソッドの呼び出しの種類、回数、順序を検証することができ、Mockオブジェクトに指定した値を返すか、指定した異常を投げ出すことができます.EasyMockにより、ユニットテストを円滑に行うために、Mockオブジェクトを容易に構築できます.
公式サイト:http://easymock.org/

メリット:


手書きを使わない-自分で作成したシミュレーションオブジェクトを通過する必要はありません.
≪セキュリティの再構築|Restructure Security|emdw≫:インタフェース・メソッドの名前または再ソートのパラメータは、実行時にテスト・コードが作成されるのを破壊しません.
戻り値サポート-戻り値をサポートします.
例外サポート-例外/例外をサポートします.
コマンドチェックサポート-チェックコマンドメソッド呼び出しをサポートします.
注釈のサポート-注釈を使用した作成をサポートします.

導入例:


pom.xml構成:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>com.natongroupId>
  
  <artifactId>MyTestartifactId>
  <version>0.0.1-SNAPSHOTversion>
  
  <properties>
    <jdk.version>1.8jdk.version>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
  properties>
  
  <dependencies>
  
  
    <dependency>
	    <groupId>org.easymockgroupId>
	    <artifactId>easymockartifactId>
	    <version>3.4version>
	    <scope>testscope>
	dependency>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.8.2version>
      <scope>testscope>
  dependency>
  
  dependencies>
  
  <build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.pluginsgroupId>
				<artifactId>maven-compiler-pluginartifactId>
				<configuration>
					<source>${jdk.version}source>
					<target>${jdk.version}target>
				configuration>
			plugin>
		plugins>
	build>
  
project>

Item.JAvaファイル:
public class Item {  
	  
    private String name;  // 
    private int quantity;  // 
      
    public Item(String name, int quantity) {  
        super();  
        this.name = name;  
        this.quantity = quantity;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getQuantity() {  
        return quantity;  
    }  
    public void setQuantity(int quantity) {  
        this.quantity = quantity;  
    }  
}

Store.JAvaファイル
public class Store {
	
	public double getPrice(String name) {
		// db , 
		try {
			Thread.sleep(3000000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 1;
	}
	
}

ShoppingCar.JAvaファイル
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class ShoppingCar {  
    
    private String name;  
    private Store store = null;  
      
    private List items = new ArrayList();  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public List getItems() {  
        return items;  
    }  
  
    public void setItems(List items) {  
        this.items = items;  
    }  
      
      
    public void addItem(Item item)  
    {  
        items.add(item);  
    }  
  
      
    public void setStore(Store store)  
    {  
        this.store=store;  
    }  
      
    public Store getStore()  
    {  
        return (this.store);  
    }  
    
    //  price
    public Double calculateTotal() {  
        Double total = 0.0;  
        for (Item item : this.items) { 
        	 //  , store, store.getPrice() , 
        	 // store  , , , 。
        	 total+= (store.getPrice(item.getName()) * item.getQuantity());  
        }  
           
        DecimalFormat decim = new DecimalFormat("0.00");  
        Double price = Double.parseDouble(decim.format(total));  
              
        return price;  
    }    
}

ここでは主にcalculateTotal()という方法をテストします.テスト例は以下の通りです.
import static org.junit.Assert.assertEquals;

import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class ShoppingCarTest {
	
	public ShoppingCar cart = null;  // 
    public Store storeMock = null;   // 
      
    @Before
    public  void initialize() {     
    	System.out.println("----@Before------");
        cart = new ShoppingCar();  
        storeMock = EasyMock.createMock(Store.class);  
        cart.setStore(storeMock);  
    }  
      
      
    @Test       
    public void testShoppingCart() {  
      
        EasyMock.expect(storeMock.getPrice("Notebook")).andReturn(5.99);  
        EasyMock.expect(storeMock.getPrice("Kindle")).andReturn(499.99);  
          
        // mock  
        EasyMock.replay(storeMock);  
        //                 
        Item item1 = new Item("Notebook", 5);  
        Item item2 = new Item("Kindle",1);  
        //   
        cart.addItem(item1);  
        cart.addItem(item2);  
        //   
        double total = cart.calculateTotal();  
          
        System.out.println(" : $"+total);  
        // 
        assertEquals("Result",529.94, total,0);  
    }  
    
    @Test       
    public void testShoppingCartWrongResult() {  
      
        EasyMock.expect(storeMock.getPrice("Notebook")).andReturn(5.99);  
        EasyMock.expect(storeMock.getPrice("Kindle")).andReturn(499.99);  
          
        // mock  
        EasyMock.replay(storeMock);  
        //                 
        Item item1 = new Item("Notebook", 5);  
        Item item2 = new Item("Kindle",1);  
        //   
        cart.addItem(item1);  
        cart.addItem(item2);  
        //   
        double total = cart.calculateTotal();  
          
        System.out.println(" : $"+total);  
        //  
        assertEquals("Result",515.96, total,0);  
    } 
    @Test       
    public void testShoppingCartCauseError() {  
      
        EasyMock.expect(storeMock.getPrice("Notebook")).andThrow(new RuntimeException(" "));	       
        EasyMock.expect(storeMock.getPrice("Kindle")).andReturn(499.99);  
          
        // mock  
        EasyMock.replay(storeMock);  
        //                 
        Item item1 = new Item("Notebook", 5);  
        Item item2 = new Item("Kindle",1);  
        //   
        cart.addItem(item1);  
        cart.addItem(item2);  
        //   
        double total = cart.calculateTotal();  
          
        System.out.println(" : $"+total);  
        //  
        assertEquals("Result",525.96, total,0);  
    }  
    @After
    public void cleanup(){  
    	System.out.println("----@After------");
        cart=null;  
        storeMock=null;  
    }  
}

上は簡単なeasyMockの使用手順です.EasyMockにはいくつかの高度な使い方があります.http://www.yiibai.com/easymock/easymock_junit_integration.html 
知行事務、専門移動事務プラットフォームhttps://zx.naton.cn/
オリジナルチーム
【総監】十二春秋之、[email protected];
【Master】zelo,[email protected];【運営】運行維持
船頭
,[email protected];
【製品デザイン】放浪猫、[email protected];【体験デザイン】ポケット、[email protected];
【iOS】コードを研ぐ作業員、[email protected];iMcG33K,[email protected];
【Android】人猿居士、[email protected];
考えの悟り、[email protected];
【java】チーフエンジニアMR_W,[email protected];【テスト】
土鏡が尋ねた[email protected]
;
【データ】fox 009521,[email protected];【安全】秘密にして、あなたは知っています.