久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何跨多個活動測試 Android 應用程序?

How do you test an Android application across multiple Activities?(如何跨多個活動測試 Android 應用程序?)
本文介紹了如何跨多個活動測試 Android 應用程序?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我們正在構建一個復雜的 Android 應用程序,該應用程序由分布在許多活動中的許多屏幕和工作流組成.我們的工作流程類似于您在銀行的 ATM 機上看到的工作流程,例如,有一個 Activity 可以登錄,轉換到主菜單 Activity 可以轉換到基于用戶選擇的其他活動.

We are building a complex Android application consisting of many screens and workflows spread across many Activities. Our workflows are similar to what you might see on a Bank's ATM machine, for example, there is an Activity to login in that transitions to a main menu Activity which can transition to other activities based on the user's choices.

由于我們有如此多的工作流程,我們需要創建跨越多個活動的自動化測試,以便我們可以端到端地測試工作流程.例如,使用 ATM 示例,我們想輸入一個有效的 PIN,驗證將我們發送到主菜單,選擇提取現金,驗證我們是否在提取現金屏幕上等等,最終找到自己返回主菜單或退出".

Since we have so many workflows we need to create automated tests that span multiple activities so we can test a workflow from end to end. For example, using the ATM example, we would want to enter a valid PIN, verify that sends us to the main menu, choose withdraw cash, verify that we are on the withdraw cash screen, etc., etc., and eventually find ourselves back on the main menu or "logged" out.

我們玩弄了 Android 附帶的測試 API(例如 ActivityInstrumentationTestCase2)以及 Positron,但似乎都無法測試超出單個 Activity 的范圍,雖然我們可以在這些工具中找到一些實用程序來進行某些單元測試,但它們不會無法滿足我們對跨越多個活動的測試場景的需求.

We've toyed with the test APIs that come with Android (e.g. ActivityInstrumentationTestCase2) and also with Positron, but neither seem capable of testing beyond the bounds of a single Activity, and while we can find some utility in these tools for some unit testing, they won't meet our needs for testing scenarios that cut across multiple Activities.

我們對 xUnit 框架、腳本、GUI 記錄器/回放等持開放態度,并希望得到任何建議.

We are open to an xUnit framework, scripting, GUI recorders/playbacks, etc. and would appreciate any advice.

推薦答案

回答我自己的懸賞問題有點尷尬,但這里是......

I feel a bit awkward about answering my own bounty question, but here it is...

我對此進行了高低搜索,無法相信任何地方都沒有發布答案.我已經非常接近了.我現在絕對可以運行跨越活動的測試,但我的實現似乎有一些時間問題,測試并不總是可靠地通過.這是我所知道的成功跨多個活動進行測試的唯一示例.希望我對它的提取和匿名化不會引入錯誤.這是一個簡單的測試,我在登錄活動中輸入用戶名和密碼,然后觀察在不同的歡迎"活動中顯示正確的歡迎消息:

I've searched high and low on this and can't believe there is no answer published anywhere. I have come very close. I can definitely run tests that span activities now, but my implementation seems to have some timing issues where the tests don't always pass reliably. This is the only example that I know of that tests across multiple activities successfully. Hopefully my extraction and anonymizing of it did not introduce errors. This is a simplistic test where I type a username and password into a login activity, and then observe a proper welcome message is shown on a different "welcome" activity:

package com.mycompany;

import android.app.*;
import android.content.*;
import android.test.*;
import android.test.suitebuilder.annotation.*;
import android.util.*;
import android.view.*;
import android.widget.*;

import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsNull.*;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import static com.mycompany.R.id.*;

public class LoginTests extends InstrumentationTestCase {

   @MediumTest
   public void testAValidUserCanLogIn() {

      Instrumentation instrumentation = getInstrumentation();

      // Register we are interested in the authentication activiry...
      Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(AuthenticateActivity.class.getName(), null, false);

      // Start the authentication activity as the first activity...
      Intent intent = new Intent(Intent.ACTION_MAIN);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.setClassName(instrumentation.getTargetContext(), AuthenticateActivity.class.getName());
      instrumentation.startActivitySync(intent);

      // Wait for it to start...
      Activity currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
      assertThat(currentActivity, is(notNullValue()));

      // Type into the username field...
      View currentView = currentActivity.findViewById(username_field);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(EditText.class));
      TouchUtils.clickView(this, currentView);
      instrumentation.sendStringSync("MyUsername");

      // Type into the password field...
      currentView = currentActivity.findViewById(password_field);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(EditText.class));
      TouchUtils.clickView(this, currentView);
      instrumentation.sendStringSync("MyPassword");

      // Register we are interested in the welcome activity...
      // this has to be done before we do something that will send us to that
      // activity...
      instrumentation.removeMonitor(monitor);
      monitor = instrumentation.addMonitor(WelcomeActivity.class.getName(), null, false);

      // Click the login button...
      currentView = currentActivity.findViewById(login_button;
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(Button.class));
      TouchUtils.clickView(this, currentView);

      // Wait for the welcome page to start...
      currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
      assertThat(currentActivity, is(notNullValue()));

      // Make sure we are logged in...
      currentView = currentActivity.findViewById(welcome_message);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(TextView.class));
      assertThat(((TextView)currentView).getText().toString(), is("Welcome, MyUsername!"));
   }
}

這段代碼顯然不是很可讀.我實際上已經將它提取到一個帶有類似英語 API 的簡單庫中,所以我可以這樣說:

This code is obviously not very readable. I have actually extracted it into a simple library with an English-like API so I can just say things like this:

type("myUsername").intoThe(username_field);
click(login_button);

我已經對大約 4 項活動進行了深度測試,并且對這種方法的工作感到滿意,盡管正如我所說,似乎偶爾會出現一個我還沒有完全弄清楚的時間問題.我仍然有興趣了解跨活動的任何其他測試方式.

I've tested to a depth of about 4 activities and am satisfied that the approach works though as I said, there appears to be an occasional timing issue I have not completely figured out. I am still interested in hearing of any other ways of testing across activities.

這篇關于如何跨多個活動測試 Android 應用程序?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Cut, copy, paste in android(在android中剪切、復制、粘貼)
android EditText blends into background(android EditText 融入背景)
Change Line Color of EditText - Android(更改 EditText 的線條顏色 - Android)
EditText showing numbers with 2 decimals at all times(EditText 始終顯示帶 2 位小數的數字)
Changing where cursor starts in an expanded EditText(更改光標在展開的 EditText 中的開始位置)
EditText, adjustPan, ScrollView issue in android(android中的EditText,adjustPan,ScrollView問題)
主站蜘蛛池模板: 不卡的av在线 | 三级av网站 | 欧美日韩第一区 | 久久久久国产一区二区三区 | 午夜精品久久久久久久久久久久 | 死神来了4无删减版在线观看 | 欧美日韩国产片 | 欧美精品日韩少妇 | 欧美理论在线观看 | 精品久久网站 | 国产在线不卡视频 | a视频在线观看 | 狠狠干2018 | 精品国产一区二区三区久久久蜜月 | 91久久综合亚洲鲁鲁五月天 | 久久在线播放 | 久草福利在线观看 | 一区二区三区视频在线播放 | 免费国产网站 | 福利网址 | 国产伦精品一区二区三区视频黑人 | 亚色视频 | 国产日韩精品一区二区 | 永久免费看mv网站入口亚洲 | 成人黄色在线 | 成人免费毛片果冻 | 一级黄视频 | 成人少妇影院yyyy | 青青草免费观看 | 夫妻av| 欧美不卡一区二区三区 | 国产男女无遮挡猛进猛出 | 综合久久99 | 亚洲免费高清 | 88av视频 | 久久国产欧美 | 超碰91在线 | www.com黄色| 秋霞一区二区三区 | 精品aaa | 99在线观看视频 |