あなたのAndroidアプリを回帰テストのためのエスプレッソで気密にリリースしてください


しばしば開発者として働いている間、我々は通常より多くの注意を必要とする問題に打たれます.
そのような状況の間、私の先輩は私を助けてくれましたが、初めてエスプレッソを使っていたので、私は自分自身を助けなければなりませんでした.
ところで、Anubhavここでは、少しガイドでは、簡単に旅を航海する.

ゴール.
エスプレッソテスト中に活動を開始する前に、共有設定を設定します.

なぜ?
私たちのAndroidアプリケーションでは、オンボードの間、ユーザーはいくつかの選択された項目を保存し、それらに基づいて、それらのコンテンツを取得します.
Androidでは、計器テスト(UIテストというだけの空想的な名前)を実行している間、設定を設定する必要があります.そうでなければ、選択された項目がないというダイアログボックスが表示され、テストが失敗します.

解決策


1アクティビティテスト規則の使用

Rules are used to add additional functionality which applies to all tests within a test class, but more generically.


アクティビティテスト規則を使用している場合は、共有設定の設定を簡単にサポートできます.
アクティビティを初期化できますが起動しません.アクティビティーが始まる前に共有設定を設定したいので、これは非常に重要です.
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
            MainActivity.class,
            true,
            false); 
ここで3つのパラメータが関数に渡されます
  • アクティビティテストクラス
  • 初期タッチモード
  • 起動アクティビティ
  • 起動アクティビティーをfalseに設定しているので、アクティビティは初期化されますが起動されず、その間に共有設定を設定できます.
    @Before
    fun setUp(){
    val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(
              getInstrumentation().targetContext
            )
          val editor = prefs.edit()
          editor.clear().apply()
     }
    
    そして、我々は我々の意志で活動を始めることができます.
        @Test
        fun populateUsernameFromSharedPrefsTest() {
    
            // Launch activity
            mActivityRule.launchActivity(new Intent())
    
            onView(withId(R.id.textview_account_username))
                    .check(matches(isDisplayed()))
                    .check(matches(withText(testUsername)))
        }
    
    
    しかし、この関数は推奨されないので、より良いオプションを探していました.

    アクティビティシナリオ規則の使用
    基本的なもの:AndroidのテストサポートライブラリとRobolElectricでのライフサイクルを管理する活動のシナリオは、Android Xのテストライブラリの一部です.
  • を使用してください
  • 連鎖ルールを使う

  • 怠惰活動シナリオ規則
    Medium Article for reference
    私はこれをテストする機会がなかったが、それは私にかなり有望に見えます.ブログをチェックアウトします.

    連鎖規則
    連鎖ルールを使用するのと同じくらい簡単です
    @Rule
    fun chain(): TestRule = RuleChain.outerRule(EspressoSharedPreferenceSetupRule()).around(ActivityScenarioRule(MainActivity::class.java))  
    
    ここでは、単純なテストルールクラスです.
    class EspressoSharedPreferenceSetupRule : TestRule {
      override fun apply(base: Statement?, description: Description?): Statement? {
        val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(
            InstrumentationRegistry.getInstrumentation().targetContext
          )
        val editor = prefs.edit()
        editor.clear().apply()
    
        // do something here
    
        )
        editor.apply()
        return base
      }
    }
    

    ここで何が起こっているのですか.(魔法)

    つのルールが定義されています.
  • アクティビティシナリオ
  • エスプレッソ共有設定ルール
  • 外側のルールは最初に実行されるように構成され、内部の1つが動作し、これは私たちがそれらを連鎖している方法です.
    したがって、それは我々のエスプレッソ共有選好が最初に実行されて、我々の活動が開始されることを保証します.

    Feel Free to connect with me or comment down below If you found this interesting.