如何测试使用AndroidUnitTestCase&LT根据ActionBarActivity(从android.support.v7.app)活性; T>类? [英] How can I test activity based on ActionBarActivity (from android.support.v7.app) using AndroidUnitTestCase<T> class?

查看:367
本文介绍了如何测试使用AndroidUnitTestCase&LT根据ActionBarActivity(从android.support.v7.app)活性; T>类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对不起,我的英语水平。

我使用Android工作室。要了解如何在Android Studio中创建测试,我用这个<一个href=\"http://stackoverflow.com/questions/16586409/how-can-i-create-tests-in-android-studio/16881419#16881419\">SO帖子

所有测试都在同一个Android应用模块,其中源。

V4 V7 连接( V7 默认情况下连接)。

模块的的build.gradle 包含:

  {相关性
    编译com.android.support:appcompat-v7:+
    编译com.android.support:support-v4:19.0.+
}

支持-v4-19.0.0.jar 显示为外部库(在项目树)。

所有是正确的,而我通常使用活动类(从 android.app <​​/ code>封装)。但是当我使用 android.support.v7.app.ActionBarActivity 作为检验活动的基类,然后我得到错误的图像:

不过,我已经使用了 Theme.AppCompat 父为测试活动的主题是:

 &LT;! - 从AndroidManifest.xml中 - &GT;
&lt;应用
    机器人:allowBackup =真
    机器人:图标=@绘制/ ic_launcher
    机器人:标签=@字符串/ APP_NAME
    机器人:主题=@风格/ AppTheme&GT;
    &LT;活动
        机器人:名字=。activity.ListOfProgressesActivity
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ AppTheme&GT;
        &所述;意图滤光器&gt;
            &lt;作用机器人:名字=android.intent.action.MAIN/&GT;            &LT;类机器人:名字=android.intent.category.LAUNCHER/&GT;
        &所述; /意图滤光器&gt;
    &LT; /活性GT;
&LT; /用途&gt;

 &LT;! - 从值(它是唯一值的文件夹)styles.xml  - &GT;
&LT;资源&GT;    &LT;! - Base应用程序的主题。 - &GT;
    &LT;样式名称=AppTheme父=Theme.AppCompat.Light.DarkActionBar&GT;
        &LT;项目名称=actionBarStyle&GT; @风格/ Widget.AppCompat.Light.ActionBar&LT; /项目&GT;
    &LT; /风格&GT;&LT; /资源&GT;

下面是异常的堆栈跟踪:

  *例外情况是:
org.gradle.api.tasks.TaskExecutionException:执行失败的任务:进步党
sTracker:connectedInstrumentTest。
        在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:69)
        在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecute(ExecuteActionsTaskExecuter.java:46)
        在org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExec
uter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.exec
UTE(SkipUpToDateTaskExecuter.java:64)
        在org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execut
E(ValidatingTaskExecuter.java:58)
        在org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecu
ter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
        在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter
.execute(SkipTaskWithNoActionsExecuter.java:52)
        在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execut
E(SkipOnlyIfTaskExecuter.java:53)
        在org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter
.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        在org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailur
E(AbstractTask.java:283)
        在org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor $ TaskExecutorW
orker.executeTask(AbstractTaskPlanExecutor.java:79)
        在org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor $ TaskExecutorW
orker.processTask(AbstractTaskPlanExecutor.java:63)
        在org.gradle.execution.taskgraph.Abs​​tractTaskPlanExecutor $ TaskExecutorW
orker.run(AbstractTaskPlanExecutor.java:51)
        在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ 1.run(DefaultT
askPlanExecutor.java:33)
        在org.gradle.internal.Factories $ 1,创建(Factories.java:22)
        在org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DEF
aultCacheAccess.java:214)
        在org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DEF
aultCacheAccess.java:276)
        在org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunning
操作(DefaultPersistentDirectoryStore.java:142)
        在org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStat
eCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:78)
        在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(Defaul
tTaskPlanExecutor.java:31)
        在org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(Defau
ltTaskGraphExecuter.java:86)
        在org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTask
ExecutionAction.java:29)
        在org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:61)
        在org.gradle.execution.DefaultBuildExecuter.access $ 200(DefaultBuildExec
uter.java:23)
        在org.gradle.execution.DefaultBuildExecuter $ 2.proceed(DefaultBuildExecu
ter.java:67)
        在org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildEx
ecutionAction.java:32)
        在org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:61)
        在org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:54)
        在org.gradle.initialization.DefaultGradleLauncher.doBuildStages(默认
GradleLauncher.java:166)
        在org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradle
Launcher.java:113)
        在org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLaun
cher.java:81)
        在org.gradle.launcher.exec.InProcessBuildActionExecuter $ DefaultBuildCon
troller.run(InProcessBuildActionExecuter.java:64)
        在org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
一:33)
        在org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
一:24)
        在org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:35)
        在org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:26)
        在org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
        在org.gradle.api.internal.Actions $ RunnableActionAdapter.execute(操作
的.java:171)
        在org.gradle.launcher.cli.CommandLineActionFactory $ ParseAndBuildAction。
执行(CommandLineActionFactory.java:201)
        在org.gradle.launcher.cli.CommandLineActionFactory $ ParseAndBuildAction。
执行(CommandLineActionFactory.java:174)
        在org.gradle.launcher.cli.CommandLineActionFactory $ WithLogging.execute(
CommandLineActionFactory.java:170)
        在org.gradle.launcher.cli.CommandLineActionFactory $ WithLogging.execute(
CommandLineActionFactory.java:139)
        在org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep
ortingAction.java:33)
        在org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep
ortingAction.java:22)
        在org.gradle.launcher.Main.doAction(Main.java:46)
        在org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        在org.gradle.launcher.Main.main(Main.java:37)
        在org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBoots
trap.java:50)
        在org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.j
AVA:32)
        在org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        在org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.ja
VA:33)
        在org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        在org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
org.gradle.api.GradleException:引起有失败的测试。看到代表
在ORT:文件:/// E:/ AndroidProjects / ProgressTrackerProject / ProgressTracker /建设/
报告/ instrumentTests /连接/ index.html的
        在com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestT
ask.runTests(DeviceProviderInstrumentTestTask.groovy:90)
        在org.gradle.util.JavaMethod.invoke(JavaMethod.java:62)
        在org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory $ StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
        在org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory $ StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
        在org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory $ StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
        在org.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute(Abstra
ctTask.java:527)
        在org.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute(Abstra
ctTask.java:510)
        在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteAction(ExecuteActionsTaskExecuter.java:80)
        在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:61)
        ... 52更多


解决方案

问题在于,被用于创建活动中。由于测试环境没有主题,你必须自己做。

 公共无效设置()抛出异常{
    super.setUp();
    ContextThemeWrapper语境=新ContextThemeWrapper(getInstrumentation()getTargetContext(),R.style.AppTheme。);
    setActivityContext(上下文);
    活性= startActivity(新意图(Intent.ACTION_MAIN),NULL,NULL);
}

Sorry for my English.

I use Android Studio. To learn how to create tests in Android Studio I used this SO post

All tests are in the same Android App Module where the source.

The support libraries for v4 and v7 are connected (v7 is connected by default).

The module's build.gradle contains:

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile "com.android.support:support-v4:19.0.+"
}

and support-v4-19.0.0.jar is shown as external library (in the project tree).

All was right while I used usual Activity class (from android.app package). But when I use android.support.v7.app.ActionBarActivity as base class for tested activity, then I get error as on the image:

But I already use Theme.AppCompat as parent for tested activity's theme:

<!-- from AndroidManifest.xml -->
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".activity.ListOfProgressesActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

and

<!-- styles.xml from values (it's the only values folder) -->
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="actionBarStyle">@style/Widget.AppCompat.Light.ActionBar</item>
    </style>

</resources>

Here is stacktrace of the exception:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':Progres
sTracker:connectedInstrumentTest'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExec
uter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.exec
ute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execut
e(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecu
ter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter
.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execut
e(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter
.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailur
e(AbstractTask.java:283)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorW
orker.executeTask(AbstractTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorW
orker.processTask(AbstractTaskPlanExecutor.java:63)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorW
orker.run(AbstractTaskPlanExecutor.java:51)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultT
askPlanExecutor.java:33)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(Def
aultCacheAccess.java:214)
        at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(Def
aultCacheAccess.java:276)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunning
Operation(DefaultPersistentDirectoryStore.java:142)
        at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStat
eCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:78)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(Defaul
tTaskPlanExecutor.java:31)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(Defau
ltTaskGraphExecuter.java:86)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTask
ExecutionAction.java:29)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:61)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExec
uter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecu
ter.java:67)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildEx
ecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:61)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecute
r.java:54)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(Default
GradleLauncher.java:166)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradle
Launcher.java:113)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLaun
cher.java:81)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildCon
troller.run(InProcessBuildActionExecuter.java:64)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
a:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.jav
a:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProce
ssBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
        at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions
.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.
execute(CommandLineActionFactory.java:201)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.
execute(CommandLineActionFactory.java:174)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(
CommandLineActionFactory.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(
CommandLineActionFactory.java:139)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep
ortingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionRep
ortingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:46)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.Main.main(Main.java:37)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBoots
trap.java:50)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.j
ava:32)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.ja
va:33)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: org.gradle.api.GradleException: There were failing tests. See the rep
ort at: file:///E:/AndroidProjects/ProgressTrackerProject/ProgressTracker/build/
reports/instrumentTests/connected/index.html
        at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestT
ask.runTests(DeviceProviderInstrumentTestTask.groovy:90)
        at org.gradle.util.JavaMethod.invoke(JavaMethod.java:62)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskF
actory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(Abstra
ctTask.java:527)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(Abstra
ctTask.java:510)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.ex
ecuteActions(ExecuteActionsTaskExecuter.java:61)
        ... 52 more

解决方案

The problem lies in the Context that is used to create the Activities. As the test context is not themed, you must do it yourself.

public void setUp() throws Exception {
    super.setUp();
    ContextThemeWrapper context = new ContextThemeWrapper(getInstrumentation().getTargetContext(), R.style.AppTheme);
    setActivityContext(context);
    activity = startActivity(new Intent(Intent.ACTION_MAIN), null, null);
}

这篇关于如何测试使用AndroidUnitTestCase&LT根据ActionBarActivity(从android.support.v7.app)活性; T&GT;类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆