Android 我可以在包含应用程序的外部使用ORMlite/SQLlite吗
我想对一个DatabaseService类进行单元测试,该类是我创建的,修改了我在网上找到的一个愿望列表应用程序 包com.test.dbAndroid 我可以在包含应用程序的外部使用ORMlite/SQLlite吗,android,sqlite,ormlite,Android,Sqlite,Ormlite,我想对一个DatabaseService类进行单元测试,该类是我创建的,修改了我在网上找到的一个愿望列表应用程序 包com.test.db import java.sql.SQLException; import java.util.List; import android.content.Context; import com.test.model.WishList; public class WishListService {
import java.sql.SQLException;
import java.util.List;
import android.content.Context;
import com.test.model.WishList;
public class WishListService
{
private static WishListService instance;
public static void init(Context ctx)
{
if (null == instance)
{
instance = new WishListService(ctx);
}
}
static public WishListService getInstance()
{
return instance;
}
private DatabaseHelper helper;
private WishListService(Context ctx)
{
helper = DatabaseHelper.getInstance(ctx);
}
public List<WishList> getAllWishLists()
{
List<WishList> wishLists = null;
try
{
wishLists = helper.getWishListDao().queryForAll();
} catch (SQLException e)
{
e.printStackTrace();
}
return wishLists;
}
public void addWishList(WishList l)
{
try
{
helper.getWishListDao().create(l);
} catch (SQLException e)
{
e.printStackTrace();
}
}
public WishList getWishListWithId(int wishListId)
{
WishList wishList = null;
try
{
wishList = helper.getWishListDao().queryForId(wishListId);
} catch (SQLException e)
{
e.printStackTrace();
}
return wishList;
}
public void deleteWishList(WishList wishList)
{
try
{
helper.getWishListDao().delete(wishList);
} catch (SQLException e)
{
e.printStackTrace();
}
}
public void updateWishList(WishList wishList)
{
try
{
helper.getWishListDao().update(wishList);
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
我的问题是,是否有任何方法可以实例化DatabaseHelper,而不必创建测试活动并将其作为DatabaseHelper所需的上下文传递?
理想情况下,我希望将这个类作为标准JUnit测试进行单元测试,而不是Android JUnit测试我不确定这是一个好主意。具有非Android JDBC包,可用于通过JDBC直接驱动Sqlite。然而,如果目标是测试您的Android数据库类,那么您将运行大量非Android代码,在我看来,这些代码将使测试无效。我被认为是在模仿所有的Android类,但不久之后它就开始变成一个迷宫般的扭曲通道
我认为你最好的方法是忍受Android junit测试。请看下面的示例。[BaseDaoTest文件]具有所有设置/关闭方法,您可以为自己的测试自定义这些方法。假设DatabaseHelper是SQLiteOpenHelper的子类,您可以向其传递模拟上下文,例如android.test.mock.MockContext,并通过调用SQLiteDatabase.openOrCreateDatabase..&返回结果。是否仍需要在模拟器或物理设备中运行?理想情况下,我不希望对android设备有任何依赖性。SQLiteDatabase有很多本机函数,所以您仍然可以在模拟器上运行。