- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在测试 Activity 中测试一个 fragment 。我将 TestTragmentActivity
添加到 androidTest
以及 AndroidManifest.xml
文件。但是当我尝试通过 ActivityTestRule
使用此 Activity 时,它会出现以下错误:
java.lang.RuntimeException: Could not launch activity
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:371)
at android.support.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:219)
at com.bbm.ui.fragments.StickerPackListFragmentTest.testEmpty(StickerPackListFragmentTest.java:29)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1887)
Caused by: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=com.bbm.debug/com.bbm.TestFragmentActivity }
at android.app.Instrumentation.startActivitySync(Instrumentation.java:391)
at android.support.test.runner.MonitoringInstrumentation.access$201(MonitoringInstrumentation.java:90)
at android.support.test.runner.MonitoringInstrumentation$5.call(MonitoringInstrumentation.java:351)
at android.support.test.runner.MonitoringInstrumentation$5.call(MonitoringInstrumentation.java:348)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
TestFragmentActivity
只是一个空 Activity 。下面是 androidTest
文件夹中的 AndroidManifest.xml
。
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.bbm">
<application
android:label="@string/app_name"
tools:replace="android:label">
<activity android:name=".TestFragmentActivity"></activity>
</application>
</manifest>
我试图获得一些关于为什么会发生这种情况的数据。下面是我的测试:
@RunWith(AndroidJUnit4.class)
public class TestFragment {
@Rule
public ActivityTestRule<TestFragmentActivity> rule =
new ActivityTestRule<>(TestFragmentActivity.class, false, false);
@Test
public void testEmpty() {
// Just for logging purpose
printActivities(InstrumentationRegistry.getTargetContext(), "APP_TARGET_CONTEXT");
printActivities(InstrumentationRegistry.getContext(), "APP_CONTEXT");
// The launch fails....
rule.launchActivity(null);
}
private void printActivities(Context context, String tag) {
try {
ActivityInfo[] infos = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES).activities;
for(ActivityInfo info : infos) {
Log.d(tag, info.name);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Log.d(tag + "_PACKAGE_NAME", context.getPackageName());
}
}
上面的输出是:
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_TARGET_CONTEXT: com.example.achhatra.myapplication.MainActivity
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_TARGET_CONTEXT_PACKAGE_NAME: com.example.achhatra.myapplication
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_CONTEXT: com.example.achhatra.myapplication.TestFragmentActivity
10-06 18:46:45.419 13030-13052/com.example.achhatra.myapplication D/APP_CONTEXT_PACKAGE_NAME: com.example.achhatra.myapplication.test
如您所见,TestFragmentActivity
在 androidTest
上下文中,而不是在目标上下文中。这就是 ActivityTestRule
无法启动它的原因。
我想知道如何在此测试中启动此 TestFragmentActivity
。
最佳答案
只有在传递自定义 Intent
以启动 Activity 时才使用 launchActivity
。否则只需在构造函数中使用 true
,如下所示:
@Rule
public ActivityTestRule<TestFragmentActivity> rule =
new ActivityTestRule<>(TestFragmentActivity.class, false, true);
否则,你可以做这样的事情来传递 Activity 参数:
@RunWith(AndroidJUnit4.class) public class TestFragment {
@Rule
public ActivityTestRule<TestFragmentActivity> rule =
new ActivityTestRule<>(TestFragmentActivity.class, false, false);
private Activity launchedActivity;
@Before
public void setup() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.putExtra("parameter", "Value");
launchedActivity = rule.launchActivity(intent);
}
}
关于android - ActivityTestRule 未启动 androidTest 中的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895346/
您好,当我在 androidTest list 文件中重写应用程序时,它不起作用。这是我在 androidTest 文件夹中的 AndroidManifest.xml 文件: 这是 mai
我正在尝试在我的 android 项目中使用 Espresso 添加仪器化测试。 除了将 AndroidJUnitRunner 添加为 testInstrumentationRunner 之外,我还添
我在运行 androidTest 时遇到问题。它找不到我的测试。奇怪的是,它只适用于某个模块。我测试并配置其 build.gradle 文件的其他模块正在运行。这里有一些信息。非常感谢任何帮助! 输出
在开始解释我的问题之前,我必须说明我是 Android 开发的新手。 我正在尝试为 Android 编写一个程序,它使用 OpenCV 的 Java API 进行一些数据处理。我正在为实现算法的类开发
androidTest 是否支持风格和构建类型变体? flavorDimensions "foo" productFlavors { full { dimension "foo" }
在纵向和横向模式下运行我的测试套件的好方法是什么?是否已经有办法这样做,或者我是否必须实现解决方案? 最佳答案 当您创建 @Rule ActivityTestRule myActivity 时;你可以
我面临以下问题。我有三个项目。我称它们为项目 A、B 和 lib Project Lib -> androidTest -> utilityfile.kt Project A -> androi
我是 Robot 的忠实粉丝保持 UI 测试干净的模式。但是我怎样才能跨多个模块重用机器人类呢? :lib-with-ui . // has Robot classes in `src/android
我有一个应用程序,其中 androidTest配置已击中臭名昭著的dex 64k method limit应用程序和测试库依赖项都有助于方法计数。 为了使方法计数再次低于 64k,我想删除一些依赖项。
我正在尝试模拟一些对象,然后将它们注入(inject)演示者但不起作用 它说我有一个模拟的 lateInt 属性没有被初始化: 这是我的测试课 @Mock lateinit var s
我正在开发一款基于 Here SDK 的导航应用。现在,当我进行集成测试 (androidTest) 时,我需要在 Android 模拟器 (Nexus 10 API 28) 上模拟不同的 GPS 坐
我正在研究这个网站上的教程 http://www.youtube.com/watch?v=jSyy5TrUD5Q 我似乎在为讲师工作,但一旦我在模拟器上运行它,它就会说 很遗憾,AndroidTest
我的应用程序将 3 个 ContentProvider 数据源组合到一个 UI 中。我想确保所有内容都正确布置,因此我尝试为模拟内容提供者提供预定义数据(稍后截取该数据的屏幕截图,但这是第 2 步)。
我们的目标是使用 AndroidTest(AndroidJUnit4) 运行自动测试。 当 SDK >= 23 时,我们已使用此代码授予权限 public static void grantPermi
有没有办法从我的代码中访问 AndroidTest 和测试文件夹中的测试类?我可以访问放置在与我的 Activity 相同的文件夹中的测试,但不能从这些测试文件夹访问。 这里有一张图来解释我的意思:
我正在使用 Android Studio 1.1.0。我试图将我的单元测试和集成测试分开。集成测试位于文件夹 src/androidTest/java 中。我正在尝试在 src/test/java/
我正在 Bitrise 中配置一个工作流来为一个 Android 项目运行我的仪器测试。我不知道为什么,但 AndroidTest 资源目录在 Bitrise ui 测试期间不可用。我的 build.
我正在尝试设置一个任务,该任务将在 android gradle 插件中设置不同的运行器。 我的想法是: ./gradlew differentRunner connectedAndroidTest
我想为一个涉及写入外部存储的应用程序编写一个 AndroidTest,但不知何故我无法使其工作。 (在Pixel2、Lg G6、Huawai P8等多款设备上测试) 所以我简化了一切,只是为了测试是否
我的 Android 项目中有三种风格。我如何才能为我的仪器测试构建其中一个(“androidTest”构建 Artifact )? 当我使用 Android Studio 2.0 Beta 2 运行
我是一名优秀的程序员,十分优秀!