【已解决】 我在看19年的网课,其中在跟着写Dao测试类时,报了有关测试类的错误
具体报错内容如下:
java.lang.RuntimeException: Delegate runner androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner for AndroidJUnit4 could not be found.
以下是跟着敲写的代码(部分):
package com.example.databasedemo;
import android.content.Context;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class TestDatabase {
@Test
public void testCreate(){
// 这里创建数据库
}
@Test
public void testInsert(){
// 测试插入数据
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
Dao dao = new Dao(appContext);
dao.insert();
}
@Test
public void testDelete(){
// 测试删除数据
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
Dao dao = new Dao(appContext);
dao.delete();
}
最终我找到了解决方案。第一个问题在于我将导入包的代码放在的"android"中的dependencies,但是实际上在我重新回顾build.gradle的时候发现,有两个dependencies,所以我重新新建一个项目并且把代码完全复制进去,同时还将依赖库的代码放在的独立在外的dependencies(即不在"android"这个标签中),其次它又报了android Cannot resolve symbol 'AndroidJUnit4'的错误,后来我在android - Cannot resolve symbol 'AndroidJUnit4' - Stack Overflow中找到了解决办法:就是将测试类放在AndroidTest文件夹下而不是Test文件夹下。
总结一下,两个步骤:
(我其实还是对这两个dependencies和两个文件夹的区别抱有疑问,接下来会去查询相关内容)
这是我的build.gradle文件:
感谢每一个浏览,思考问题以及回答问题的人,由衷感谢!
我模仿官方的代码写,可是会报No instrumentation registered! Must run under a registering instrumentation.
是不是我漏看了什么还是说哪里的用法不对,还请指个方向
如需使用此框架将模拟对象添加到本地单元测试,请遵循以下编程模型:
build.gradle
文件中添加 Mockito 库依赖项,如设置测试环境中所述。@RunWith(MockitoJUnitRunner.class)
注释。此注释可告知 Mockito 测试运行程序验证您对框架的使用是否正确无误,并简化了模拟对象的初始化。@Mock
注释。when()
和thenReturn()
方法来指定某种条件以及满足该条件时的返回值。以下示例展示了如何创建使用模拟
Context
对象的单元测试。现在官方的更新了,你能打开这个链接吗?
https://developer.android.com/training/testing/unit-testing/local-unit-tests?hl=zh-cn
参考一下以下这段代码:
就像这样子:
这几个依赖添加了吗?
你是写在了androidTest的test目录下了吗?
你把你的代码放到test目录下吧。