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