当前位置: 首页 > 知识库问答 >
问题:

Android/Gradle浓缩咖啡测试未启动活动

姜钊
2023-03-14

我很难说服新的Android构建系统运行测试。在运行测试时,它给出了无法解析活动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();
  }

建筑的相关部分。等级:

apply plugin: 'android-library'

android {
  compileSdkVersion 19
  buildToolsVersion "19.0.3"

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }

  defaultConfig {
    minSdkVersion 11
    targetSdkVersion 19

    testPackageName "com.wealdtech.test"
    testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
  }
}

我获得的完整堆栈跟踪是:

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-Library更改为Android,以防出现问题,但结果还是一样。

我看不到任何关于Espresso测试或Gradle构建系统测试的先决条件的文档,我还没有讨论过这些。我有什么想法不能作为测试的一部分开始这项活动吗?

共有1个答案

姜钊
2023-03-14

对于使用Android-Library插件的项目,可以说AndroidManifest.xml并没有真正使用。事实上,库项目的清单需要编译的全部内容是:

<manifest package="com.package.yours"/>

当创建AAR文件时,您试图放入其中的任何权限或意图都将被忽略。它是一个库,而且就我所知,库项目的清单中没有任何东西可以将它放入AAR(或者JAR(如果您也要做其中的一个))。

但是!这是将在构建推送到设备的测试项目时使用的清单。您可以直接在src/androidtest/androidmanifest.xml中转储胡言乱语,gradle不会在意,但是您必须将测试活动添加到src/main/androidmanifest.xml,否则./gradlew ConnectedCheck将抛出运行时异常。

我的项目看起来是这样的(确实如此,我只是更改了名称):

src/
  androidTest/
    java/
      com.package.mine/
        TestActivity.java
        VariousTests.java
  main/
    java/
      com.package.mine/
        FancyLibrary.java
    AndroidManifest.xml

下面是我的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非常相似。

 类似资料:
  • 我在做Espresso测试时遇到了一个问题,我知道Espresso不能处理动画,所以我在下面做了。-禁用我的测试设备窗口动画,过渡动画和动画师持续时间比例都设置为关闭(这不起作用)-然后我试图在我的代码中添加一个标志(如。espresso_testing=true。如果为true,我的代码将跳过调用所有startAnimation()函数调用。--->这很管用。然而,在编写espresso测试用例

  • 我有一个MainMenu活动,它从文件中获取数据并显示出来。我希望数据在每次浓缩咖啡测试开始时被删除,并且在测试之间不会持续。 我尝试了以下方法: 但是,它不会删除文件。我认为上下文可能不正确。有没有办法在浓缩咖啡测试开始时清除内部存储? 这些文件是。ser '文件。

  • 浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误

  • 本文向大家介绍Android 设置意式浓缩咖啡,包括了Android 设置意式浓缩咖啡的使用技巧和注意事项,需要的朋友参考一下 示例 在build.gradle您的Android应用模块的文件中,添加下一个依赖项: 在文件中AndroidJUnitRunner为testInstrumentationRunner参数指定build.gradle。 此外,添加此依赖项以提供意图模拟支持 并将其添加为w

  • 在我的主要活动中,我有initUi函数,它将触发对webviewActivity的意图,在webviewActivity中,有一个FragWebView,其中加载了url。 以下是来自FragWebView的示例代码: 我从我的主要活动中传递打开webview的意图是: 请让我知道如何解决这个问题。 问候