我想对Android Fragment类进行单元测试.
我可以使用AndroidTestCase设置测试,还是需要使用ApplicationTestCase?
有没有关于如何使用这两个TestCases的有用示例?开发人员站点上的测试示例很少,似乎只关注测试活动.
我在其他地方找到的只是扩展AndroidTestCase类的例子,但是所有经过测试的都是将两个数字加在一起,或者如果使用了Context,它只是做一个简单的get并测试某些东西不是null!
据我所知,片段必须存在于一个活动中.那么我可以创建一个模拟Activity,或者获取Application或Context来提供一个Activity,我可以在其中测试我的片段吗?
我是否需要创建自己的Activity然后使用ActivityUnitTestCase?
谢谢你的协助.
崔佛
android unit-testing fragment android-fragments activityunittestcase
我正在尝试测试模块中的活动.我只是试图在测试方法中开始这个活动,但我总是有一个AssertionFailedError.我在网上搜索了这个问题,但找不到任何解决方案.任何帮助表示赞赏.
这是我的测试类:
public class ContactActivityTest extends ActivityUnitTestCase<ContactActivity> {
public ContactActivityTest() {
super(ContactActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
}
public void testWebViewHasNotSetBuiltInZoomControls() throws Exception {
Intent intent = new Intent(getInstrumentation().getTargetContext(),
ContactActivity.class);
startActivity(intent, null, null);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
junit.framework.AssertionFailedError
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:147)
at com.modilisim.android.contact.ContactActivityTest.testWebViewHasNotSetBuiltInZoomControls(ContactActivityTest.java:29)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1763)
Run Code Online (Sandbox Code Playgroud)
问候.
android unit-testing assertion activityunittestcase start-activity
我在测试我的android应用程序时遇到了问题.
我有2个testCase类,如果我单独执行它们,没有问题,测试运行到最后.但是,如果我在我的测试项目中"右键单击"并选择"作为Android Junit测试运行",我会收到一条消息
Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554
[2012-03-27 15:56:27 - matroussedemaquillageTest] Collecting test information
[2012-03-27 15:56:31 - matroussedemaquillageTest] Test run failed: Instrumentation run failed due to 'Process crashed.'
Run Code Online (Sandbox Code Playgroud)
看到我的两个testClasses吼叫:
第一个测试类
package fr.smardine.matroussedemaquillage.test;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.ImageSwitcher;
import fr.smardine.matroussedemaquillage.EntryPoint;
public class EntryPointTest extends
ActivityInstrumentationTestCase2<EntryPoint> {
private EntryPoint mActivity;
private ImageSwitcher mSwitcher;
public EntryPointTest() {
super("fr.smardine.matroussedemaquillage",
fr.smardine.matroussedemaquillage.EntryPoint.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void test2() { …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Espresso 2.0的AndoridJUnitRunner与ActivityUnitTestCase 集成.但是,当startActivity()尝试初始化mMockParent = new MockParent()时,我的测试会崩溃.
这是我做的:
使用Intellij 14 CE创建一个新项目并对build.gradle进行一些更改.
android{
defaultConfig {
applicationId "com.noob.testing"
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.+'
androidTestCompile('org.mockito:mockito-core:1.9.5')
androidTestCompile('com.google.dexmaker:dexmaker:1.2')
androidTestCompile('com.google.dexmaker:dexmaker-mockito:1.2')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.0')
androidTestCompile('com.android.support.test:testing-support-lib:0.1')
}
Run Code Online (Sandbox Code Playgroud)
编写JUnit4风格的单元测试.
@RunWith(AndroidJUnit4.class)
public class MainActivityJUnit4Test extends ActivityUnitTestCase<MainActivity> {
public MainActivityJUnit4Test() {
super(MainActivity.class);
}
MainActivity activity;
@Before
public void setup() throws Exception {
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
super.setUp();
ContextThemeWrapper context = …Run Code Online (Sandbox Code Playgroud) junit android unit-testing activityunittestcase android-espresso
我试图通过扩展测试类来为我的应用程序中的活动编写单元测试用例ActivityUnitTestCase.我可以提前成功运行测试用例,但现在我总是在运行时遇到异常.虽然我对处理非常熟悉,但我NullPointerExceptions无法弄清楚造成这种情况的问题.我找不到任何类似的问题,所以我发布了这个问题.
堆栈跟踪显示我的代码中此行有一个空对象引用
activity = startActivity(mIntent, null, null);
Run Code Online (Sandbox Code Playgroud)
但该startActivity方法应该得到我正在测试的活动的实例.我不确定为什么它会返回null.
这是堆栈跟踪.
java.lang.NullPointerException: Attempt to write to field 'android.os.IBinder android.app.ActivityThread.mLastIntendedActivityToken' on a null object reference
at android.app.Activity.performCreate(Activity.java:6372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:346)
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:158)
at com.abc.test.MainActivityTest.access$100(MainActivityTest.java:16)
at com.abc.test.MainActivityTest$1.run(MainActivityTest.java:34)
at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:1891)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Test running failed: Instrumentation run failed due to 'java.lang.NullPointerException'
Run Code Online (Sandbox Code Playgroud)
这是Test类
public class MainActivityTest extends ActivityUnitTestCase<MainActivity>{
private Intent mIntent;
private MainActivity activity; …Run Code Online (Sandbox Code Playgroud) android nullpointerexception activityunittestcase android-instrumentation