딥 링크를 허용하는 애플리케이션이 있습니다.
Manifest.xml :
<activity
android:name=".activities.unsigned.MagicLink"
android:label="Some test">
<intent-filter android:label="Test">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.myapp" />
</intent-filter>
</activity>
<activity
android:name=".activities.unsigned.MainScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
활동 :
public class MagicLink extends BusAppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent != null && intent.getAction() != null) {
Uri data = intent.getData();
ServicesApi servicesApi = ServicesApi.init(this);
servicesApi.setSessionId(data.getQueryParameter(HttpRemoteApi.SESSION_ID));
startActivity(new Intent(this, LoginActivity.class));
}
}
}
이것은 사용자가 사용하면 완벽하게 작동합니다. 지금 테스트를 만들고 싶습니다. 그래서 다음과 같이 씁니다.
androidTest :
@RunWith(AndroidJUnit4.class)
@LargeTest
public class LoginTest {
@Rule
public final ActivityTestRule<MainScreen> main = new ActivityTestRule<>(MainScreen.class);
@Test
public void checkSmth() {
clickMagicLink();
//...
}
private void clickMagicLink() {
String url = "com.myapp://login?session_id="+utils.getSessionId();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
main.launchActivity(i);
}
}
그러나 대신에 시작하는 MagicLink
활동을이 일을 시작 MainScreen
(인 활동 MAIN
). 내가 뭘 잘못 했어?
추신 나는 또한 다음과 같은 것을 보았다 : new ActivityTestRule<>(MainScreen.class,true, false);
. 하지만이 생성자를 사용하면 테스트가 시작되지만 Android 앱은 시작되지 않습니다 (에뮬레이터가 시작되지만 앱은 시작되지 않음).
ActivityTestRule.launchActivity()
항상 테스트중인 활동을 시작합니다. 다른 활동을 시작하는 데 사용할 수 없습니다. 이 경우 항상 시작 MainActivity
됩니다. Intent
매개 변수는 활동에 전달됩니다. 이를 통해 테스트 중에 엑스트라를 보낼 수 있습니다. 인 텐트는 시작할 활동을 선택하는 데 사용 되지 않습니다 .
또한 문서에는
에서 launchActivity 플래그를 사용하여 활동을 수동으로 지연 시작하지 않도록 명시 적으로 요청하지 않는 한이 메서드를 직접 호출하지 마십시오
ActivityTestRule(Class, boolean, boolean)
.
MagicLink
활동 을 테스트 하려면 다음을 사용할 수 있습니다 ActivityTestRule<MagicLink>
.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MagicLinkTest {
@Rule
public final ActivityTestRule<MagicLink> main = new ActivityTestRule<>(MainScreen.class, false, false);
@Test
public void testMagicLink() {
String url = "com.myapp://login?session_id="+utils.getSessionId();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
main.launchActivity(i);
// assertions go here
}
}
사용할 수도 ActivityTestRule<MainScreen>
있지만 실제 사용자와 똑같은 동작을 시뮬레이션해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다