如何测试使用AndroidUnitTestCase&LT根据ActionBarActivity(从android.support.v7.app)活性; T&GT;类? [英] How can I test activity based on ActionBarActivity (from android.support.v7.app) using AndroidUnitTestCase<T> class?
问题描述
对不起,我的英语水平。
我使用Android工作室。要了解如何在Android Studio中创建测试,我用这个<一个href=\"http://stackoverflow.com/questions/16586409/how-can-i-create-tests-in-android-studio/16881419#16881419\">SO帖子
所有测试都在同一个Android应用模块,其中源。
为 V4
和 V7
连接( V7 $ C的支持库$ C>默认情况下连接)。
模块的的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.AbstractTaskPlanExecutor $ TaskExecutorW
orker.executeTask(AbstractTaskPlanExecutor.java:79)
在org.gradle.execution.taskgraph.AbstractTaskPlanExecutor $ TaskExecutorW
orker.processTask(AbstractTaskPlanExecutor.java:63)
在org.gradle.execution.taskgraph.AbstractTaskPlanExecutor $ 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屋!