【问题标题】:java.lang.AssertionError Trying to test whether an INSERT statement executes successfullyjava.lang.AssertionError 试图测试一个 INSERT 语句是否执行成功
【发布时间】: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


【解决方案1】:

我不熟悉 android,但在 Java SE 8 中它可能看起来像:

assert termsList.stream().anyMatch(
   e -> e.getTermID() == 1 && "term1".equals(e.getTermName())
);

【讨论】:

  • 感谢您的回答。虽然我不知道为什么,但这有效并且测试按预期通过。你能详细说明你的代码在这里做什么吗?
  • 1. assert 接收布尔值; 2.termsList是一个集合,因此,使用stream可以遍历所有元素; 3. anyMatch 是流 (docs.oracle.com/javase/8/docs/api/java/util/stream/…) 的终端操作,如果集合中的 1 个元素通过了某些条件,则返回 true
猜你喜欢
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多