junit+mockitoを使用したmockテストの例
5891 ワード
ウェブサイトを始めたばかりの頃、テストはすべてこのように(例えばユーザー情報のフォームロジックをテスト修正する):ブレークポイントを設定し、実行プログラムを起動し、ログインし、クリックしてクリックしてテストのページに入り、テストデータを入力し、ブレークポイントに入る.......大きなプログラムの起動が遅く、ログインし、多くのフォーム情報を入力してテストに入るコードは、私の心がほとんど崩壊しています.その時、ウェブプログラムをテストして普通のプログラムをテストするように、テストするコードを直接テストすればいいと思っていました.その後、mockテストが可能であることが分かった.
新しいmavenプロジェクトを作成し、junitとmockitoの依存を追加します.
コントロールとしてservletクラスを新規作成します.
次に、このサーブレットの
上のコードを分析してみましょう.まず、テストする
オブジェクトはシミュレーションされていますが、オブジェクトの動作はまだシミュレーションされていません.サーブレットの
シミュレーションオブジェクトが
要するに、mockテストは、自分で作成できないものが必要な場合は、mock()を出て、when()で必要なシミュレーション動作を追加します.
1、Java Mocking入門—Mockito 2、ソースコードを使ってダウンロードする
mockテスト例
新しいmavenプロジェクトを作成し、junitとmockitoの依存を追加します.
<dependency>
<groupId>org.mockitogroupId>
<artifactId>mockito-allartifactId>
<version>1.8.4version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.8.2version>
dependency>
コントロールとしてservletクラスを新規作成します.
public class StudentController extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response){
String name = request.getParameter("name");
System.out.println(name);
}
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response){
}
}
次に、このサーブレットの
doGet
とdoPost
の方法をテストします.新しいJunitテストクラスは次のとおりです.// import
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.Before;
import org.junit.Test;
public class TestStudentController {
private HttpServletRequest request;
private HttpServletResponse response;
private StudentController studentController;
@Before
public void setUp() throws Exception {
request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
when(request.getParameter("name")).thenReturn("123");
}
@Test
public void testDoGet() {
studentController = new StudentController();
studentController.doGet(request, response);
}
@Test
public void testDoPost() {
}
}
上のコードを分析してみましょう.まず、テストする
doGet(request, response)
です.doGet
には2つのパラメータが必要です.そして、この2つのパラメータは容器から入ってきて、自分では作成できません.だから、1つをシミュレートします.次のようになります.request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
オブジェクトはシミュレーションされていますが、オブジェクトの動作はまだシミュレーションされていません.サーブレットの
doGet
法がrequest.getParameter("name")
を用いていることを見出し,シミュレーション対象にこのシミュレーション挙動を追加した.次のようになります.when(request.getParameter("name")).thenReturn("123");
シミュレーションオブジェクトが
getParameter("name")
メソッドを呼び出すたびに、123
が実際に実行されたかのように、request.getParameter("name")
の値が返されます.要するに、mockテストは、自分で作成できないものが必要な場合は、mock()を出て、when()で必要なシミュレーション動作を追加します.
リファレンス
1、Java Mocking入門—Mockito 2、ソースコードを使ってダウンロードする