gpt4 book ai didi

android - intent-filter 不适用于 android 中的 ActivityTestRule

转载 作者:行者123 更新时间:2023-11-29 15:40:16 27 4
gpt4 key购买 nike

我有一个接受深层链接的应用程序。

list .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>

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));
}
}
}

如果用户使用它,这个东西就可以完美地工作。好吧,我现在想为它创建一个测试。所以我写了这样的东西:

android测试:

@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 Activity 这东西开始MainScreen Activity (即 MAIN )。我做错了什么?

附言我也看到了这样的东西:new ActivityTestRule<>(MainScreen.class,true, false); .但是有了这个构造函数我的测试开始了,但是 android 应用程序没有(我的意思是模拟器启动但应用程序没有)

最佳答案

ActivityTestRule.launchActivity() 总是启动被测试的 Activity 。您不能用它来启动任何其他 Activity 。在这种情况下,它将始终以 MainActivity 开头。 . Intent参数传递给 Activity 。这允许您在测试期间发送额外内容。 Intent 用于选择要启动的 Activity。

另请注意文档说

Don't call this method directly, unless you explicitly requested not to lazily launch the Activity manually using the launchActivity flag in ActivityTestRule(Class, boolean, boolean).

如果你想测试你的 MagicLink Activity ,您可以使用 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>但您必须模拟与实际用户完全相同的操作。

关于android - intent-filter 不适用于 android 中的 ActivityTestRule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com