[英]Moq.Dapper QueryAsync does not work with mocked transaction object
我正在嘗試測試使用QueryAsync()的存儲庫方法,並且該方法在事務下。 所以我在嘲笑IDbConnection以及IDbTransaction。 但是當我運行測試用例時,它給出了一個錯誤
“無法將類型為'Castle.Proxies.IDbTransactionProxy'的對象轉換為類型為'System.Data.Common.DbTransaction'”
using System;
using Dapper;
using Moq;
using Moq.Dapper;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public class ComplexType
{
public string StringProperty { get; set; }
public int IntegerProperty { get; set; }
}
private static void TestMoqDapperExecuteAsyncIDbConnectionWithoutTransaction()
{
var connection = new Mock<IDbConnection>();
connection.SetupDapperAsync(c => c.QueryAsync<int>(It.IsAny<string>(), It.IsAny<object>(), It.IsAny<IDbTransaction>(), It.IsAny<int>(), It.IsAny<CommandType>()))
.ReturnsAsync(new List<int>
{
5
});
var result = connection.Object
.QueryAsync<int>("")
.GetAwaiter()
.GetResult();
Console.WriteLine(string.Format(" Test without transaction {0}", result.Count() != 0 ? "PASSED" : "FAILED"));
}
private static void TestMoqDapperExecuteAsyncIDbConnectionWithTransaction()
{
var connection = new Mock<IDbConnection>();
var tran= new Mock<IDbTransaction>();
connection.SetupDapperAsync(c => c.QueryAsync<int>(It.IsAny<string>(), It.IsAny<object>(), It.IsAny<IDbTransaction>(), It.IsAny<int>(), It.IsAny<CommandType>()))
.ReturnsAsync(new List<int>
{
5
});
var result = connection.Object
.QueryAsync<int>("",null,tran.Object)
.GetAwaiter()
.GetResult();
Console.WriteLine(string.Format("Test with transaction {0}", result.Count() != 0 ? "PASSED" : "FAILED"));
}
public static void Main()
{
TestMoqDapperExecuteAsyncIDbConnectionWithoutTransaction();
TestMoqDapperExecuteAsyncIDbConnectionWithTransaction();
}
}
您也可以在小提琴上運行它以重現相同的問題https://dotnetfiddle.net/40lMbh
根據異常消息,看起來QueryAsync
擴展方法使用了DbTransaction
因此,請改用抽象的DbTransaction
,它會通過。
TestMoqDapperExecuteAsyncIDbConnectionWithTransaction()
//...
var tran = new Mock<DbTransaction>(); //<--Note abstract class instead of interface
//...
在提供的小提琴上對其進行了測試,並且可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.