作为实践测试驱动开发的新手,我常常陷入困境,如何将持久性单元测试数据库.
我知道技术上这将是一个集成测试(不是单元测试),但我想找到以下最佳策略:
这些最佳做法是什么?
关于测试SQL:我知道这可以做到,但如果我使用像NHibernate这样的O/R Mapper,它会在用于输出查询的别名中附加一些命名瑕疵,因为这有点不可预测我不确定我可以测试一下.
我应该放弃一切,只是信任NHibernate吗?我不确定这是谨慎的.
我想为以下方法编写测试:
public void addItem(Item item) {
items.add(0, item);
DatabaseHelper.getInstance().writeOneItem(item);
}
Run Code Online (Sandbox Code Playgroud)
该类称为ItemManager,它的职责是管理用户可以保存到列表或从列表中删除的项目.它应与保留列表中项目的Sqlite数据库保持同步.
当DatabaseHelper(ormlite)没有被引入时init(Context context)(通常在我的Andoid应用程序启动时发生,但在我的测试中没有完成),它的getInstance()方法将返回null并且从上面执行的方法将崩溃.
我该怎么办?我可以init(Context context)从我的测试中调用,或者DatabaseManager.getInstance()在调用它之前检查是否为null.但这似乎更像是一种解决方法.在我看来,我不应该在这个方法中做任何数据库的东西,并尝试尽可能地从数据库中分离ItemManager.
关于理想解决方案的外观的任何想法,不是从具体实施的形式,而是从一般的设计角度来看?
我是单元测试的新手,很难将相互之间的东西分开.