亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android Room 測試刪除不起作用 (Java)

Android Room 測試刪除不起作用 (Java)

萬千封印 2023-08-16 09:40:53
我正在嘗試使用 android-room 對我的 DAO 進行單元測試。我已經編寫了一個可以正常工作的插入測試。不幸的是,刪除方法似乎不起作用。我嘗試了幾種不同的測試設置。沒有一個有效。這是 DAO:@Daopublic interface MonthlyDao {    @Insert(onConflict = OnConflictStrategy.REPLACE)    void saveAll(List<Monthly> goals);    @Insert(onConflict = OnConflictStrategy.REPLACE)    void save(Monthly goal);    @Update    void update(Monthly goal);    @Delete    void delete(Monthly goal);    @Query("SELECT * FROM Monthly")    LiveData<List<Monthly>> findAll();    @Query("SELECT * FROM monthly")    List<Monthly> findAllList();}這是每月實體:@Entitypublic class Monthly {    @PrimaryKey(autoGenerate = true)    private int monthlyId;    @TypeConverters(CalendarTypeConverter.class)    @ColumnInfo(name = "date")    private Calendar date = Calendar.getInstance();    @ColumnInfo(name = "title")    private String title;    @ColumnInfo(name = "description")    private String description;    @ColumnInfo(name = "completed")    private boolean completed;...    public int getMonthlyId() {        return monthlyId;    }    public void setMonthlyId(int monthlyId) {        this.monthlyId = monthlyId;    }這是我正在運行的測試:@RunWith(AndroidJUnit4.class)public class MonthlyTest {    private MonthlyDao monthlyDao;    private MonthlyGoalsDatabase db;    @Before    public void createDb() {        Context context = ApplicationProvider.getApplicationContext();        db = Room.inMemoryDatabaseBuilder(context, MonthlyGoalsDatabase.class).build();        monthlyDao = db.getMonthlyDao();    }    @After    public void closeDb() throws IOException {        db.close();    }我將 UpdatedGoals 列表排除為空,但事實并非如此。仍然有我在測試時插入的目標。
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

注釋的方法@Delete使用實體上的主鍵來知道要從數據庫中刪除哪一行(因為可能有多行具有相同的數據但不同的鍵)。


但是,您使用的是您創建的初始goal對象,該對象沒有主鍵,因此不能用于指示要刪除的行。


嘗試這樣做:


monthlyDao.save(goal);

List<Monthly> goals = monthlyDao.findAllList();

Assert.assertThat(goals.get(0).getTitle(), equalTo(goal.getTitle()));

monthlyDao.delete(goals.get(0)); // <-- Delete the goal returned from the find, which will have an ID

List<Monthly> updatedGoals = monthlyDao.findAllList();

Assert.assertTrue(updatedGoals.isEmpty());

這可以很容易地清理一下,但上面的示例只更改了一行,以明確問題所在。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號