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