JMockit Mockテスト入門詳細

6701 ワード

1.概要:


皆さん、この文章を見て、会社から強制的に要求されたユニットテストのカバー率に悩んでいると思います.「me,too」と言いたいです.
私は才能がなくて、前にユニットのテストを书いて、すべて环境と文脉に依存して、実はJunitテストとは言えなくて、时には甚だしきに至っては自分のクラスの中で1つのmainの方法を书いて、简単なテストを行って、これらは菜鸟と初心者に対してすべて経験しなければならない过程で、もし自分で开発すれば、私は依然としてこのようにテストして、しかし会社にとって、会社のSonarあるいはその他のツールはプロジェクトのコードの品质を评価しにくいです例えば、オーバーライド率のテストなど、オーバーライドされていないコードは、リスクを意味し、特に品質が生命である企業にとっては、なおさらです.
一つのプロジェクトに対して、どのようなユニットを選んでMockフレームワークをテストするかは非常に重要です.もしあなたがテストする方法があれば、フレームワークがサポートされていないと面倒になるので、「コード」を嘆くしかありません.
それから私はみんなと一绪にJMockitを勉强して、相応のテストの例は私は次第に追加して、一歩一歩総括して、结局自分のプロジェクトの中で使ったテストはすべてをカバーするのが难しいです.

2.実戦:


この文書では、Mavenコンストラクションツールを使用しています.Mavenを使用していない場合は、Mavenセントラルライブラリにアクセスできます.http://mvnrepository.com/または公式サイト:http://jmockit.org/該当するjarパッケージを検索してダウンロードします.
JMockitのMavenライブラリのアドレス:

    org.jmockit
    jmockit
    1.27
 

    org.jmockit
    jmockit-coverage
    1.23
本明細書で使用する他のjarは、次のとおりです.

    org.apache.commons
    commons-lang3
    3.4


     junit
     junit
     4.12
余計なことは言わないで、直接コードをつけます.

2.1 BeanEntityクラス:

 /**
 * Created by lance on 2016/9/6.
 */
public class BeanEntity {

    private String beanId;
    private String beanName;
    private String beanType;

    public String getBeanId() {
        return beanId;
    }

    public void setBeanId(String beanId) {
        this.beanId = beanId;
    }

    public String getBeanName() {
        return beanName;
    }

    public void setBeanName(String beanName) {
        this.beanName = beanName;
    }

    public String getBeanType() {
        return beanType;
    }

    public void setBeanType(String beanType) {
        this.beanType = beanType;
    }
}

2.1 Dao層コード:

import java.util.Arrays;
import java.util.List;

/**
 * Created by zhangzh on 2016/9/6.
 */
public class Dao {

    public void insert(BeanEntity bean){
           System.out.println("Dao insert");
    }

    public void remove(String id){
        System.out.println("Dao remove");
    }

    public void update(String name,String type){
        System.out.println("Dao update");
    }

    public List finds(String name){
        System.out.println("Dao finds");
        BeanEntity bean = new BeanEntity();
        bean.setBeanId("24336461423");
        bean.setBeanName(" ");
        bean.setBeanType(" ");
        return Arrays.asList(bean);
    }

}

2.3 Biz層コード:

import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * Created by lance on 2016/9/6.
 */
public class Biz {

    private Dao dao;

    public void insert(String id, String name, String type) {

        if (StringUtils.isAnyBlank(id, name, type)) {
            return;
        }

        BeanEntity bean = new BeanEntity();
        bean.setBeanType(type);
        bean.setBeanId(id);
        bean.setBeanName(name);
        dao.insert(bean);
    }

    public void remove(String id) {
        if (StringUtils.isBlank(id)) {
            return;
        }
        dao.remove(id);
    }

    public void update(String name, String type) {
        if (StringUtils.isAnyBlank(name, type)) {
            return;
        }
        dao.update(name, type);
    }

    public String finds(String name) {
        if (StringUtils.isBlank(name)) {
            return null;
        }
        List beans = dao.finds(name);

        StringBuilder sb = new StringBuilder();
        sb.append("#");
        for (BeanEntity bean : beans) {
            sb.append(bean.getBeanType()).append("#");
        }

        return sb.toString();
    }

    public Dao getDao() {
        return dao;
    }

    public void setDao(Dao dao) {
        this.dao = dao;
    }

}

2.4 Mockテストクラスコード:

import mockit.Expectations;
import mockit.Injectable;
import mockit.Verifications;
import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.springframework.util.Assert;

import java.util.ArrayList;
import java.util.List;

/**
* Created by lance on 2016/9/6.
*/
public class BizTest {

   private Biz biz = new Biz();

   @Injectable
   Dao dao;

   @Before
   public void setUp() throws Exception {
       biz.setDao(dao);
   }

   @Test
   public void insertTest() {

       biz.insert("111","Name","student");

       new Verifications() {
           {
               dao.insert((BeanEntity)any);
               times = 1;
           }
       };

   }

   @Test
   public void insertNullTest() {

       biz.insert("111",null,"student");

       new Verifications() {
           {
               dao.insert((BeanEntity)any);
               times = 0;
           }
       };

   }

   @Test
   public void updateTest() {

       biz.update("111","student");

       new Verifications() {
           {
               dao.update("111",anyString);
               times = 1;
           }
       };

   }

   @Test
   public void removeTest() {

       biz.remove("111");

       new Verifications() {
           {
               dao.remove("111");
               times = 1;
           }
       };

   }

   @Test
   public void findTest() {

       new Expectations(dao) {{

           dao.finds("name");

           BeanEntity bean1 = new BeanEntity();
           bean1.setBeanType("student");
           bean1.setBeanName("name");
           bean1.setBeanId("11111111");

           BeanEntity bean2 = new BeanEntity();
           bean2.setBeanType("teacher");
           bean2.setBeanName("name");
           bean2.setBeanId("2222222222222");

           List beans = new ArrayList();
           beans.add(bean1);
           beans.add(bean2);

           result = beans;

       }};

      String result =  biz.finds("name");

       Assert.isTrue(StringUtils.equals("#student#teacher#",result));

       new Verifications() {
           {
               dao.finds("name");
               times = 1;
           }
       };

   }

}

ほら、簡単でしょう.