Andriod Studio单元测试问题集总

问题1:

导入了junit包却无法使用注解@RunWith
这里写图片描述

分析:

依赖有添加,查看Project面板下的External Libraries下的junit包有该类,如下图所示:

testCompile 'junit:junit:4.12'

Andriod Studio单元测试问题集总_第1张图片

考虑过是否是testCompile关键词的问题,后面发现是buildTypes使用了自定义配置:
Andriod Studio单元测试问题集总_第2张图片

解决方法:

暂时使用debug默认可使用@RunWith


问题2:

Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (25.3.1) and test app (25.4.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

分析:

与其他support包(如appcompat-v7,support-v4)版本不匹配问题:

解决方法:

直接使用匹配版本的包,如果在第三方lib依赖了support-annotations而版本不匹配,强制使用匹配的版本:

androidTestCompile('com.android.support:support-annotations:25.3.1') {
    force = true
}

问题3:

java.lang.Exception: Test class should have exactly one public zero-argument constructor
at org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:171)
at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:148)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:127)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.(ParentRunner.java:84)

分析:

可能使用了有参数的构造方法,没有无参构造方法,如下所示:

public InstrumentationTest(Class activityClass) {
    super(activityClass);
}

解决方法:

去掉参数,super里传ActivityInstrumentationTestCase2类中指定的泛型class,如下图所示:

Andriod Studio单元测试问题集总_第3张图片


最后

运行点击方法左边的绿色箭头运行,稍等片后会出现如下图所示的成功提示界面:
Andriod Studio单元测试问题集总_第4张图片

Andriod Studio单元测试问题集总_第5张图片


依赖包如下:
    testCompile 'junit:junit:4.12'
    //强制使用指定版本,否则会使用其他地方导入的包
    androidTestCompile('com.android.support:support-annotations:25.3.1') {
        force = true
    }

    androidTestCompile 'com.android.support.test:runner:1.0.1'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile 'com.android.support.test:rules:1.0.1'
    // Set this dependency to build and run Espresso tests
    androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1'
    // Set this dependency to build and run UI Automator tests
//    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
单元测试完整代码如下:
package com.newcare.hes.test;

import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;

import com.newcare.hes.control.sku.ShoppingCartActivity;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * Created by MZ on 2017/12/19.
 */
@RunWith(AndroidJUnit4.class)  //必须要指定
public class InstrumentationTest extends ActivityInstrumentationTestCase2<ShoppingCartActivity> {

    private ShoppingCartActivity mActivity;

    public InstrumentationTest() {
        super(ShoppingCartActivity.class);
    }

    @Before
    public void setUp() throws Exception {
        super.setUp();
        //在测试方法前调用,一般用于初始化
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    @Test
    public void test() {
        //单元测试代码
        mActivity.initData();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
        //测试方法结束调用,内部已实现activity finish
    }
}

参考

你可能感兴趣的:(莫名奇妙)