获取junit.framework.AssertionFailedError:使用Unit和Mockito时,[package]中没有找到任何测试

时间:2015-08-07 00:49:38

标签: java android unit-testing junit mockito

我在android项目中添加了以下依赖项:

 // Unit testing dependencies
androidTestCompile 'junit:junit:4.12'
// Set this dependency if you want to use Mockito
androidTestCompile 'org.mockito:mockito-core:1.10.19'

使用junit4 api创建一个测试(例如,Adder是一个总和整数的简单类):

@RunWith(MockitoJUnitRunner.class) 
public class AdderTest {

    @Test
    public void testValidAdd() {
        Adder adder = new Adder();
        assertEquals(adder.add(1,1), 2);
    }
}

当我尝试运行测试时,我得到:

  

运行测试   测试运行开始了   junit.framework.AssertionFailedError:在com.test.myapp.AdderTest中找不到任何测试   在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)   在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)   在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)   在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1701)   完成

我看过herehere,但没有任何帮助。

有人看到我做错了什么/有什么输入吗?

2 个答案:

答案 0 :(得分:17)

这些不是单元测试,它们是仪器测试。我有同样的问题,并通过将这些行添加到模块的build.gradle:

来解决它
android {
    ...
    sourceSets {
        ...
        defaultConfig {
            testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
        }
    }
}

你必须在依赖项中添加跑步者,我建议你喝咖啡:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'

修改

我忘记了注释。只需删除@RunWith并使用line:

创建一个@Before方法
MockitoAnnotations.initMocks(this);

或:

System.setProperty("dexmaker.dexcache", InstrumentationRegistry.getTargetContext().getCacheDir().getPath());

我不得不提这种方式不推荐。要使用第二个,您必须使用dex-maker为mockito添加依赖项:

androidTestCompile ('com.google.dexmaker:dexmaker-mockito:1.2') {
        exclude module: 'mockito-core'
    }

由于您添加了mockito,我们必须从新的依赖项中排除mockito核心。它已包含正常的dex-maker模块。

答案 1 :(得分:2)

您正在使用Android Instrumentation测试。默认情况下,Android测试运行器不在JUnit4上运行,它使用InstrumentationTestCase的子类在JUnit3上运行。

您需要恢复拨打MockitoAnnotations.initMocks()的手动呼叫,并可选择向Mockito.validateMockitoUsage()拨打电话。当然,直接拨打Mockito.mock(等)也会有效。

作为替代方案,有一个official JUnit4 runner,可以从Android Support Test Library安装。通过调用此Instrumentation而不是默认测试运行器,您可以在设备上运行JUnit4测试,包括使用MockitoJUnitRunnerMockitoRule