Translate

BTemplates.com

Powered by Blogger.

2017年9月16日土曜日

2017-09-16 到達点メモ


今日はAndroid6.0をエミュレーターでテストした時に
タイマー一覧をクリックする→5分を選択→開始する→初期化する→タイマー一覧をクリックする→7分を選択してタップするを繰り返すと
偶にタイマーを選択した瞬間に0になる時があるというバグの検証をする

可能性としてはかなり低いが、
一応メモとしてWheelPickerという自作ライブラリを使っている事を明記しておく

今やらないとずっといつかやるになるので自動テストの検証をする
ひとまず、Appiumを試してみる

動作確認は以下のサイトを参考にしている
Android, iOSでGUIテストを自動化するためのAppium [環境構築編] [Windows + Node.js]


npmを使うので、まずそれを入れようと思ったのだが
どうもnode.jsを入れるとそれに付随してnpmも入るらしいので
早速入れてみる。無事入ったのを確認できた。

参考サイト
Node.js / npmをインストールする(for Windows)

という訳でさっそくappium-doctorをnpmで入れてみて
試してみた




何気にNode.jsを要求されている件について。
まぁ、入れたからいいんだけどさ……。
*この時参考にしたサイトの題名をよく読んでいなかった。

環境変数を設定できるようにするには
Win10の場合だと、設定→バージョン情報→関連情報のシステム情報→システム詳細設定で見ることができる。もっと見やすい方法がありそうな気がするがとりあえずこれで良しとする。
JAVA_HOMEは普通に調べたらわかったが、ANDROID_HOMEが結構曲者だった
*参考にしたサイトに普通に記述してある。
ANDROID_HOMEはAndroidSDKの事を指しているらしい。
AndroidStudioを立ち上げて、Configure→ProjectDefalutes→ProjectStructureで
AndroidSDKの場所がわかるようになる
再度試したところ、%JAVA_HOME%\binで引っかかった。
どうやらJAVA_HOMEのURL自体に\binはいらないらしい

参考サイト
Cordova でビルドしようとしたら ANDROID_HOME is not set と言われた
Android SDKの場所の確認方法
PATHの設定及び環境変数JAVA_HOMEの設定
Android Studioの設定

で、ここから動作テストをしようと思ったのだが、
操作方法が全く分からん……。
調べても一年前の記事がほとんどだし、どうしたらいいのか……。

此処までやっておいてあれだが、飽くまで楽にテストをするのが目的なので
いったんAppiumは保留にしておく

つぎは、Espresso Test Recorderの方を試すことにする。
これはエミュレーターの操作から自動テストを出力する機能である。
というか、記憶のどこかにあったけど、思い出せなかったのでスルーしていた。

操作方法は以下のサイトを参考にした。
一つ以外特に何か設定はいらなかった

参考サイト
Record Espresso Test でテストコードを自動生成してみる

設定中に色々してたらこんなエラーが出た
Error:Conflict with dependency 'com.google.code.findbugs:jsr305' in project ':app'. Resolved versions for app (3.0.1) and test app (2.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

対処方法は下が一番早い

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}
参考サイト
Error:Conflict with dependency 'com.google.code.findbugs:jsr305'


で、録画中に分かった事だが、バグの詳細が分かった。
どうも極端に思い処理をしているときに停止ボタンをタップすると
値が0になるようである。

録画機能を使う際に気を付けることとして
通知ドロワーの処理は録画範囲外なので気を付ける事。

androidTestUnitの書き方を調べたほうがいいかも
このままだとエラーが起こってもどこでエラーが起こったのかがわかりにくい。

結局、書き方を調べるのにそっちのけで
エラーの原因を探していたのだが原因が分かった。
画面の更新を別クラスのHandlerでかけているのだが
恐らくStop→別クラスでキャンセルメソッド(内部値のカウントをゼロにする。また、この値を現在の残り時刻としている)を呼び出す→別クラスの内部値をもとに画面更新処理をやる
*画面更新のメソッドはMainActivityでおこなっている。
此処で関係あるのは、MainActivityと別クラスの二つだけである。

上記の手順でやっているのだが、処理が重いと実際の画面更新よりも内部の処理が先に走ってしまい、0になった時に画面を更新してしまう為、値がずれるという事が起きてしまう。
上手く説明できている気がしないが、要は処理が重いと想定した順番通りの更新順にならないという事が起きるという話だと思っている。

対策は、MainActivityで開始ボタンを押したかどうかのフラグをもっているのでそれをMainActivityの画面更新メソッドでthis.flagという形で指定して開始ボタンを押していない時は、更新処理をしないという処理を行えばよい。

状態の管理は、呼び出し元(ここではMainActivity)を参照するようにすれば
飽くまで全体の流れはMainActivityで制御しているので
このようなズレが発生しても問題が起こりにくいのではないかと思われる。

頭がゆだってきたので、Androidはこれくらいで終わり。
後はudemyでコースを買ったのでそれのさわりをやって終わり。
さわりをやった感想としてはもともと初心者向けの内容だったので
基本的な話しかなかった。

今日はここまで。

0 コメント:

コメントを投稿