Android Espresso AsyncでファイルをアップロードするAPIのテスト

Android

Android Espresso パスワードなどのバリデーションチェックなどでも書きましたが、登録フォームのテスト!これは時間がかかるし、嫌なものですよね~(;´Д`)

こういうことこそ、Espressoの出番です!
やることは、Androidアプリから、サーバーに登録情報をPostします。
ファイルを2つアップロード、Emailの重複は許可されていないので、Emailはランダムな文字列を作ります。
APIでEmailが重複していないので登録成功、Emailが重複しているので登録エラー、の2つの場合の返り値を読み取ってテストするところまでです。

CountDownLatchを使ってやってみましたが、もっとスマートな方法がありそうなんですけどね~。
毎回言っていますが、どなたか教えてください┌o ペコッ

 public class RegisterAsyncTest extends ActivityInstrumentationTestCase2 {
 
    String mJsonString = null;
    Exception mError = null;
    CountDownLatch signal = null;
    private Activity mActivity;
 
    public RegisterAsyncTest() {
        super(RegisterActivity.class);
    }
 
    @Override
    protected void setUp() throws Exception {
        signal = new CountDownLatch(1);
        mActivity = getActivity();
    }
 
    @Override
    protected void tearDown() throws Exception {
        signal.countDown();
    }
 
    public void testUploadTask() throws InterruptedException {
 
        HashMap<String, String> register_info = new HashMap<>();
 
        register_info.put("last_name", Constants.LAST_NAME);
        register_info.put("first_name", Constants.FIRST_NAME);
        register_info.put("addresses[0][post_code]", Constants.POST_CODE);
        register_info.put("addresses[0][prefecture]", Constants.PREFECTURE);
        register_info.put("addresses[0][city]", Constants.CITY);
        register_info.put("addresses[0][ward]", Constants.WARD);
        register_info.put("addresses[0][town]", Constants.TOWN);
        register_info.put("addresses[0][address]", Constants.ADDRESS);
        register_info.put("addresses[0][tel]", Constants.TEL);
        register_info.put("password", Constants.PASS);
 
        String email = makeRundomMailAddress();
        register_info.put("email", email);
        register_info.put("username",email);
 
        register_info.put("experience_years_from", Constants.EXPERIENCE);
        register_info.put("regular_login", Constants.REGULAR_LOGIN);
 
        register_info.put("licensePhotoFilepath", Constants.LICENCE_PHOTO_PATH);
        register_info.put("facePhotoFilePath", Constants.FACE_PHOTO_PATH);
 
        Context context = mActivity.getApplicationContext();
 
        UploadAsyncTask task = new UploadAsyncTask(context);
        task.setListener(new UploadAsyncTask.UploadTaskListener() {
            @Override
            public void onComplete(String jsonString, Exception e) {
                mJsonString = jsonString;
                mError = e;
                signal.countDown();
            }
        }).execute(register_info);
        signal.await();
 
        assertNull(mError);
        assertFalse(TextUtils.isEmpty(mJsonString));
 
        assertTrue(mJsonString.startsWith("{    \"response\": {        \"status\": \"SUCCESS\""));
        assertTrue(mJsonString.endsWith("}"));
 
    }
 
    /**
     * すでにあるメールアドレスではエラーが帰ってくる
     * @throws InterruptedException
     */
    public void testUploadTaskEmailInvalidFail() throws InterruptedException {
 
        HashMap<String, String> register_info = new HashMap<>();
 
 
        register_info.put("last_name", Constants.LAST_NAME);
        register_info.put("first_name", Constants.FIRST_NAME);
        register_info.put("addresses[0][post_code]", Constants.POST_CODE);
        register_info.put("addresses[0][prefecture]", Constants.PREFECTURE);
        register_info.put("addresses[0][city]", Constants.CITY);
        register_info.put("addresses[0][ward]", Constants.WARD);
        register_info.put("addresses[0][town]", Constants.TOWN);
        register_info.put("addresses[0][address]", Constants.ADDRESS);
        register_info.put("addresses[0][tel]", Constants.TEL);
        register_info.put("password", Constants.PASS);
 
        String email = "hogeo@onlineconsultant.jp";
        register_info.put("email", email);
        register_info.put("username",email);
 
        register_info.put("experience_years_from", Constants.EXPERIENCE);
        register_info.put("regular_login", Constants.REGULAR_LOGIN);
 
        register_info.put("licensePhotoFilepath", Constants.LICENCE_PHOTO_PATH);
        register_info.put("facePhotoFilePath", Constants.FACE_PHOTO_PATH);
 
        Context context = mActivity.getApplicationContext();
 
        UploadAsyncTask task = new UploadAsyncTask(context);
        task.setListener(new UploadAsyncTask.UploadTaskListener() {
            @Override
            public void onComplete(String jsonString, Exception e) {
                mJsonString = jsonString;
                mError = e;
                signal.countDown();
            }
        }).execute(register_info);
        signal.await();
 
        assertNull(mError);
        assertFalse(TextUtils.isEmpty(mJsonString));
 
        assertTrue(mJsonString.startsWith("{    \"response\": {        \"info\": \"email:"));
        assertTrue(mJsonString.endsWith("}"));
 
    }
 
 }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です