Android/Gradle浓缩咖啡测试未启动活动
我很难说服新的Android构建系统运行测试。运行测试时,会出现Android/Gradle浓缩咖啡测试未启动活动,android,android-gradle-plugin,android-espresso,Android,Android Gradle Plugin,Android Espresso,我很难说服新的Android构建系统运行测试。运行测试时,会出现无法解决活动for:Intent错误,该错误已在其他问题中讨论过,但其中没有解决我的问题 我已经将其剥离,这样我的测试包就根本不依赖于我的主包(com.wealdtech.app),但启动活动时仍然存在问题 我的测试活动: package com.wealdtech.test; import android.app.Activity; import android.os.Bundle; public class TileLayo
无法解决活动for:Intent
错误,该错误已在其他问题中讨论过,但其中没有解决我的问题
我已经将其剥离,这样我的测试包就根本不依赖于我的主包(com.wealdtech.app
),但启动活动时仍然存在问题
我的测试活动:
package com.wealdtech.test;
import android.app.Activity;
import android.os.Bundle;
public class TileLayoutTestActivity extends Activity
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
}
我的测试班:
package com.wealdtech.test;
import android.test.ActivityInstrumentationTestCase2;
public class TileLayoutTest extends ActivityInstrumentationTestCase2<TileLayoutTestActivity>
{
public TileLayoutTest()
{
super(TileLayoutTestActivity.class);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
setActivityInitialTouchMode(false);
}
public void testNull()
{
final TileLayoutTestActivity activity = getActivity();
activity.finish();
}
我获得的完整堆栈跟踪是:
java.lang.RuntimeException: Could not launch activity
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentation.startActivitySync(GoogleInstrumentation.java:286)
at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:119)
at android.test.InstrumentationTestCase.launchActivity(InstrumentationTestCase.java:97)
at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:104)
at com.wealdtech.test.TileLayoutTest.testNull(TileLayoutTest.java:21)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onStart(GoogleInstrumentationTestRunner.java:167)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Caused by: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x14000000 cmp=com.wealdtech.test/.TileLayoutTestActivity }
at android.app.Instrumentation.startActivitySync(Instrumentation.java:379)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentation.access$101(GoogleInstrumentation.java:52)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentation$2.call(GoogleInstrumentation.java:268)
at com.google.android.apps.common.testing.testrunner.GoogleInstrumentation$2.call(GoogleInstrumentation.java:266)
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:841)
我没有包括我的AndroidManifest.xml
,因为我读到的所有内容都表明我不需要添加TileLayoutTestActivity
的意图,但是我还是尝试了这么做,结果是一样的
我还尝试将Gradle插件从android库
更改为android
,以防出现问题,但同样的结果
我看不到任何关于浓缩咖啡测试或Gradle构建系统测试的先决条件的文档,我还没有介绍过。关于哪些我不能作为测试的一部分启动活动,有什么想法吗?对于使用
android library
插件的项目,可以半准确地说,AndroidManifest.xml
没有真正使用。事实上,库项目的清单需要编译的全部内容如下:
<manifest package="com.package.yours"/>
这是我的AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.uie.uieanalytics">
<uses-permission android:name="android.permission.PERM_I_NEED"/>
<application>
<activity android:name=".TestActivity" />
</application>
</manifest>
否则,我将使用与您相同的测试运行程序,我的build.gradle
非常相似。其他人可以参考我的文章,这样他们就不会浪费时间
对于仪器测试,Android构建了两个APK——一个带有应用程序,另一个带有测试。如果将活动置于
androidTest
flavor,则它属于测试APK。如果您稍后使用指令插入(直接或使用ActivityTestRule
)启动活动,则Android会在您的应用程序APK中搜索该活动并失败,因为应用程序APK中没有此类活动
要解决此问题,您可以在应用程序的debug
风格中定义测试活动(类和清单)。然后,它将与您的应用程序APK打包,测试将正常工作
更新:或者——正如Austin Mahoney建议的那样——您应该使用
InstrumentationRegistry.getInstrumentation().getTargetContext()
以访问应用程序上下文而不是检测上下文。请在您可以运行的规则内更改活动名称
ActivityTestRule MacActivityRule=新ActivityTestRule(
更改活动名称)您是否能够找到此问题的解决方案?在我的项目中遇到同样的问题。有人有解决方案吗?令人恼火的是,AS似乎没有意识到类存在并且它们显示为红色。谢谢你的回答!您不必在测试包中定义活动,只需在创建您的意图时使用正确的
上下文即可。使用InstrumentationRegistry.getInstrumentation().getTargetContext()
这将返回应用程序上下文
,而不是instrumentation apk的上下文
。
src/
androidTest/
java/
com.package.mine/
TestActivity.java
VariousTests.java
main/
java/
com.package.mine/
FancyLibrary.java
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.uie.uieanalytics">
<uses-permission android:name="android.permission.PERM_I_NEED"/>
<application>
<activity android:name=".TestActivity" />
</application>
</manifest>