我正在尝试使用Dapper.Contrib.Extensions(特别是Insert(object)扩展方法)为存储库编写单元测试。由于这是一个静态方法,我们无法使用伪IDbConnection捕获输出。我在网上找到了推荐使用带有ServiceStack.OrmLite.Sqlite的InMemoryDatabase的信息。这是我的代码:
public class InMemoryDatabase
{
private readonly OrmLiteConnectionFactory _dbFactory =
new OrmLiteConnectionFactory(":memory:", SqliteOrmLiteDialectProvider.Instance);
public IDbConnection OpenConnection() => _dbFactory.OpenDbConnection();
public void Insert<T>(IEnumerable<T> items)
{
using (var db = OpenConnection())
{
db.CreateTableIfNotExists<T>();
foreach (var item in items)
{
db.Insert(item);
}
}
}
}
我有一个普通的旧POCO类,没有数据注释。当我使用Dapper和In-Memory数据库中的扩展方法调用对该方法进行单元测试时,我收到以下错误:
发生了'System.Data.SQLite.SQLiteException'类型的异常 Dapper.dll但未在用户代码中处理
其他信息:SQL逻辑错误或缺少数据库
没有这样的功能:SCOPE_IDENTITY
我知道错误是由于Dapper和Sql Server使用的函数Sql Lite没有。我想知道的是有一种方法可以解决这个问题,以便使用扩展方法调用对方法进行单元测试。如果有人找到另一种方法,我没有和ServiceStack.OrmLite结婚。