2016-03-02 76 views
2

我想为我的应用程序数据库编写测试用例。这是我的设置方法做:RenamingDelegatingContext不创建测试数据库

@Before 
    public void testCaseSetUp() { 
     RenamingDelegatingContext context = new RenamingDelegatingContext(getTargetContext(), "test_"); 
     dbController = new DBController(context); 
     dbController.open(); 
    } 

DBController.java

public DBController(Context c) { 
      context = c; 
     } 

     public DBController open() throws SQLException { 
      dbHelper = DBHelper.getInstance(context); 
      database = dbHelper.getWritableDatabase(); 
      return this; 
     } 

RenamingDelegatingContext不创建一个新的测试数据库,而不是使用现有的数据库文件。这导致我的测试用例失败,因为我已经有了数据。

回答

3

您确定您在DBHelper课程内的某个位置重新创建了SQLiteOpenHelper吗?从它的外观来看,后者是一个单身人士,所以我可以假设你不是每次都重新创建它。您应该在您的@Before方法中这样做,因为这里使用RenamingDelegatingContext的想法是在打开新数据库之前删除旧数据库。

此外,在您的测试后关闭SQLiteOpenHelper类是一种好习惯。喜欢的东西:

@After 
public void tearDown() { 
    dbHelper.close(); 
} 

如果这不起作用,请发表您的DBHelper类,以验证它的确定。

+0

这是一个很好的结果。我为我的助手类使用了单例模式。葛丽塔谢谢你。 –

+0

有没有一种方法可以创建一个单独的测试数据库来进行测试,然后在拆解时将其销毁。这样我就不会触碰生产数据库? –

+0

正确使用'RenamingDelegatingContext'是要走的路。当你在'SQLiteOpenHelper'中使用这个上下文时,它会创建一个与你的真实无关的测试数据库!如果答案对你有帮助,也许你可以赞扬它 - 这样其他人就会知道这就是解决方案。 – Vesko

相关问题