【发布时间】:2021-02-04 19:41:13
【问题描述】:
我正在尝试为 Room Database INSERT 语句设置测试。我创建了一个测试实体并调用了 dao.insert。然后,我创建了一个实体类型的列表,并将其设置为等于 DAO 函数 getALL()。我的断言是:断言 termsList.contains(testTerm)。当我调试测试方法时,我确认 testTerm 已插入,并且列表实际上包含 testTerm,但我不断收到 Java.lang.AssertionError 的测试失败。
我对 Junit 和测试比较陌生,我们将不胜感激。
这是我的测试类和代码:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class TermDaoTest {
private TermDAO termDao;
private FullDatabase database;
@Before
public void createDb(){
Context context = ApplicationProvider.getApplicationContext();
database = Room.inMemoryDatabaseBuilder(context, FullDatabase.class).allowMainThreadQueries().build();
termDao = database.termDao();
}
@After
public void closeDb() throws IOException {
database.close();
}
@Test
public void insertTermTest()throws Exception {
TermEntity testTerm = new TermEntity();
testTerm.setTermID(1);
testTerm.setTermName("term1");
termDao.insert(testTerm);
List<TermEntity> termsList = termDao.getAllTerms();
assert termsList.contains(testTerm);
}
}
Here is the error message I recieved
Here is the debugger open showing that the termsList does in fact contain the testTerm
【问题讨论】:
-
您需要覆盖 TermEntity 中的“equals”方法。 testTerm 对象和 termsList 中的 testTerm 实际上是不同的。它们的 ID 和名称相同,但在对象级别上它们是不同的。覆盖等于或手动比较 ID 和名称,就像在 @lazylead 答案中一样
-
欢迎来到 SO。将您的错误消息添加到消息正文中,而不是作为图像。
标签: java android-studio junit android-room assert