GooglePlay/AppStoreのレビューを取得するスクリプトを少し整えた

過去、GooglePlayのレビューを新着順に取得するみたいな雑な記事書いていたのですが、気晴らしに少し書き換えてみました。 Nokogiriとか使っていたのですが、たかだか性能も求めない処理にNokogiriは重たいのでOgaを使ってみることにしました。Bundlerだけで完結できる環境です。楽だ。 ついでに、引数にjpやenなどの言語を与えることで、その言語に対応したレビューを取得できるようにしました。ページングのようなちょっと面倒なことはしていないので、本当に単純なものです。 こんな感じで使える。 https://github.com/KazuCocoa/simpleAppReviewReporterMore

Stetho1.1.1でTimberを経由したconsoleへの出力が可能になってた

ふとStethoを見てみると、以下の通り1.1.1がリリースされていました。 ここでは、bug fixとstetho-timberが追加された模様。 https://github.com/facebook/stetho/releases/tag/v1.1.1 stetho-timber 自体、okhttpやhttpconnetionのようにpluginとして実装されてます。 なので、build.gradleにtimber向けの行を追加する必要があります。 SetUp stetho-timber add dependencies build.gradle Plant StethoTree on Timber Example… ここでなくても、 onCreate に Timber.plant(new StethoTree()); を加えてあげるだけで良いです。 ここはTimberと同じですね。 Build… and see Google Dev Console 地味に、同じlog文字列に対しては行を折りたたんでカウントしてくれるのが優しいですねMore

Snorkeling with Dagger 2でDagger2に潜った

Dagger2を味見してみたやDagger2を使って依存性の存在する箇所をテストしてみたでは、簡単な自分で作ったModuleに対して、テスト時だけ返り値を置き換える、という簡単な例を使ってDIを試してみました。 今回は、SharedPreferenceのような外部ライブラリに依存する箇所をうまく置き換え、Unit test / Integration testレベルにおけるtestabilityを向上させることを目的に追加で味わってみました。ここまでくると、大分頭の理解としては馴染んだ感があります。 元になった記事はこの Snorkeling with Dagger 2 というものです。 http://konmik.github.io/snorkeling-with-dagger-2.html 以下では、この記事を読んで、頭になじませながら備忘録として書いたもの。 @Inject や @Module をつけたメソッドから、コンパイルによって @Component つきのブリッジが生成されて @Inject のフィールドへひも付けられる流れなんかも書かれています。Dagger prefixがついているメソッドの生成、MembersInjector を持ったインスタンスの生成という流れも載っています。 @Inject と @Module、 @Providorのひも付き方は、以下の図つきで説明されていました。 @Inject アノテーションは、以下で同じ意味を持ちます。個人で試行錯誤しながら学んでいるときも、public付きでないといけないと警告もらったりしていて、なるほどという感じ。 Dagger prefixのつくメソッドは、コンパイルされなければ生成されないコードが関係します。そのため、コンパイルするまではエラーが表示され続けます。 そこに対しても言及されていて、著者がDagger2Helperを作ってそれを使ったエラー回避の方法や、reflectionを使った回避方法を書いていたりします。なるほど。 Tipsとして、injectionの方法を共有していました。 通常は MyApplication.inject(…) と書くのですが、ここは MainInjector.getComponent().inject(…) としてもかけるそうな。 他、reflectionを使わずにinjectionする方法も書いています。Dagger2Helperを使ってApplicationクラスにinjectを定義しておき、そのApplicationクラスを他クラスから@Injectで直接とってきて使うという方法。 この方法の性能面での有用性も書いていて、なるほどという感じでした。 A direct injection on a subclass takes about 0.0013 ms, a reflected injection on…More

Appium 1.4.0 betaがリリースされていた

Appiumの1.4.0 betaがリリースされていました。 https://github.com/appium/appium/releases/tag/v1.4.0-beta iOS8.3のサポートだったり、optionの追加というところが目新しそうですね。 Android capabilityとして以下が増えている。 disableAndroidWatchers dontStopAppOnReset dontStopAppOnReset がサポートされたので、シナリオの作成によっては adb install時に -S フラグつけてターゲットのパッケージをprocess killしないようにすうることができるようになるのですね。 Appium Serverへの引数としても、以下が増えている模様。 Capability Description Values –dont-stop-app-on-reset false (Android-only) When included, refrains from stopping the app before restart –debug-log-spacing false Add exaggerated spacing in logs to help with visual inspection –suppress-adb-kill-server false (Android-only) If set, prevents Appium from killing the adb…More

Stetho and PonyDebugger support finding elements

You know for finding elements is the first step to describe GUI Testing scenarios. For example, you need to find accessibilityIdentifier, accessibilityLabel, text and so on to describe GUI test in iOS with UIAutomation or Appium. In Android, you need to detect contentDescription or text and so on. In usually, anyone use Appium Inspector or…More

Dagger2を使って依存性の存在する箇所をテストしてみた

Dagger2を味見してみた、Dependency Injectionに関して今更だけど学んだを経て、Dagger2を触ってみました。 簡単な、Injectionの機構を使って、依存関係のある場所をテスト時だけ異なる依存関係にしてテストを実施する、というところまで達成できました。よかったよかった。そして、ある程度理解できたので、あとは実際の実装に落とし込みながらなじませる、が必要そう。 確認した内容はごくごく簡単で、表示する文言をビルド環境によって変更するというもの。Dagger2では、injectionするために@Moduleのアノテーション、@Providerのアノテーションつけられたものに対して以下のようにModuleをセットします。そこで、 SampleTestModule のように依存関係を拡張したModuleを渡してあげれば良いだけ。 Dagger2はコンパイル時に依存性が注入されるので、コンパイルされるまでは DaggerSampleApplication_SampleApplicationComponent に警告が表示されますが、それは気にしない。 通常 依存性注入 トラブルシューティング 以下の2点、気をつける必要があった。 compileOptionの追加 Gradleプロジェクトでは以下を追加しましょう。 annotationライブラリの追加 Gradleプロジェクトでは以下を追加しましょう。 ref: http://stackoverflow.com/questions/25090570/google-auto-factory-not-annotated-with-provided その他 終わったあとに見てみたのだが、以下記事も参考になりそう。 http://www.future-processing.pl/blog/android-testing-with-espresso-2-and-dagger-2-mocking-long-running-operations/ ButterKifeとDagger2は触って感覚を覚えたので、今度はRoboGuiceかな。 testotips.ioで、依存性を持つところのテストTipsとか共有したい機運だ。More

Dagger2を味見してみた

Dependency Injectionの、Dagger1とDagger2を学んで、DIの理解を深めてみる。Tasting Dagger 2 on Androidを参考にしました。 Dagger1はGuiceに影響を受けている。特徴は以下。Compile time injection。 Multiple injection points: dependencies, being injected. Multiple bindings: dependencies, being provided. Multiple modules: a collection of bindings that implement a feature. Multiple object graphs: a collection of modules that implement a scope. Dagger2はAutoValue projectの影響を受けているらしい。 No reflection at all: graph validation, configurations and preconditions at compile time.…More

Dependency Injectionに関して今更だけど学んだ

最近、Android開発でテストを構築していくとき、Dependency Injectionは避けて通れないものだなと感じたので、DIを頭になじませるために本腰を入れて学んでみることにしました。 DIの概念や簡単な説明自体は少しWebを探せば見つかるのですが、それが頭に馴染むのには少し時間がかかった… あと、実装コードをもう少し手を動かさないとな、という感じです。 作って学ぶ Dependency Injection [Ruby][設計] Jim Weirich さんから学ぶ DI(Dependency Injection) When to use Dependency Injection Inversion of Control コンテナと Dependency Injection パターン 原書: Inversion of Control Containers and the Dependency Injection pattern objc.ioの記事から Dependency Injection, Annotations, and why Java is Better Than you Think it is Injectionの機構を組み込むとき、大きくわけて Compile Time と Runtime Annotation…More

koboldを使い画像を比較する

画像比較ツールは数多くありますが、少し前にkoboldを使ったのでそのメモです。 kobold koboldは、perceptualdiffのような画像比較をnodeで行うことができるツールです。nodeで実施できるので、npmで管理することができる点、ほかツールとの組み合わせが容易なところが良いなと思ったところです。 ImaeMagicやperceptualdiffをコマンドラインから使う、ということは前からしていましたが、Yahoo!が公開しているkoboldがいい感じにnodeで切り出していたものを少し前に見つけました。機能が限定されているために不要な処理がなく使い易いです。 このkoboldの画像比較のコアはblink-diffのようです。なので、細かな設定値に関してもblink-diffをみるように書いています。blink-diffを個別に使う、でも良いかもしれませんね。 サンプルコード 以下GitHubのREADMEの通りにやれば、ざっとできることを想像できます。 https://github.com/KazuCocoa/sampleKobold positive 全体の設定のほかに、特定ファイルだけに適用したい個別の設定を追加することができたりと、比較的自由がきく npmで管理できる blockOut オプションにより、特定の領域を比較対象外にすることができる negative png以外にも比較を行いたい場合、これではまかなえない 結果の出力が今は標準出力だけれど、欲しい形で少し整形したいな。More