C# 如何模拟返回void但修改传入的引用类型的方法?
我有一个像-C# 如何模拟返回void但修改传入的引用类型的方法?,c#,mocking,C#,Mocking,我有一个像- public interface ILedgerStoreRepository { void AddInvoiceDetailsToBatchWriteObj(ref BatchWrite<InvoiceDetailsDAO> batchWriteDetails, ref InvoiceDetailsDAO invoiceDetails); } 公共接口ILedgerStoreRepository { 无效AddInvoiceDetailsTo
public interface ILedgerStoreRepository
{
void AddInvoiceDetailsToBatchWriteObj(ref BatchWrite<InvoiceDetailsDAO> batchWriteDetails,
ref InvoiceDetailsDAO invoiceDetails);
}
公共接口ILedgerStoreRepository
{
无效AddInvoiceDetailsToBatchWriteObj(参考BatchWrite batchWriteDetails,
参考发票详情(发票详情);
}
我想以这样的方式模拟此函数:我只想验证invoiceDetails值作为我的验证。目前我正在像这样尝试-
var repoMock = new Mock<ILedgerStoreRepository>();
repoMock.Setup(m =>
m.AddInvoiceDetailsToBatchWriteObj(ref batchWriteObj1,
ref It.Ref<InvoiceDetailsDAO>.IsAny)).Callback<BatchWrite<InvoiceDetailsDAO>, InvoiceDetailsDAO>(
(write, dao) =>
{
Assert.Equal(LedgerStoreTestConstants.TestInvoiceDetailsMappingDao, dao);
}).Verifiable();
var repoMock=new Mock();
repoMock.Setup(m=>
m、 AddInvoiceDetailsToBatchWriteObj(参考batchWriteObj1,
ref It.ref.IsAny)回调(
(写,道)=>
{
Assert.Equal(账本存储测试常量.TestInvoiceDetailsMappingDao,dao);
}).可验证();
但这让我犯了以下错误-
System.ArgumentException
无效的回调。带有参数(ref BatchWrite,ref InvoiceDetailsDAO)的方法上的安装程序无法使用参数(BatchWrite,InvoiceDetailsDAO)调用回调
有人能帮我吗?我稍微修改了输入参数,以便能够测试它
public interface ILedgerStoreRepository
{
void AddInvoiceDetailsToBatchWriteObj(ref List<string> batchWriteDetails, ref string invoiceDetails);
}
public class TestClass
{
public void Execute(ILedgerStoreRepository repo)
{
List<string> a = new List<string> { "Test", "Alpha" };
string b = "Alpha";
repo.AddInvoiceDetailsToBatchWriteObj(ref a, ref b);
}
}
// You need this delegate
delegate void AddInvoiceCallback(ref List<string> batchWriteDetails, ref string invoiceDetails);
[Test]
public void DummyTest()
{
var repoMock = new Mock<ILedgerStoreRepository>();
repoMock.Setup(m =>
m.AddInvoiceDetailsToBatchWriteObj(ref It.Ref<List<string>>.IsAny,
ref It.Ref<string>.IsAny))
.Callback(new AddInvoiceCallback((ref List<string> batch, ref string details)
=>
{
Assert.That(batch.Contains("Test"));
})).Verifiable();
// Act
new TestClass().Execute(repoMock.Object);
}
公共接口ILedgerStoreRepository
{
作废AddInvoiceDetailsToBatchWriteObj(参考列表batchWriteDetails,参考字符串invoiceDetails);
}
公共类TestClass
{
公共作废执行(IledgerStoreRepo)
{
列表a=新列表{“Test”,“Alpha”};
字符串b=“Alpha”;
报告书附录a、附录b;
}
}
//你需要这个代表
委托无效AddInvoiceCallback(参考列表batchWriteDetails,参考字符串invoiceDetails);
[测试]
公共无效测试()
{
var repoMock=new Mock();
repoMock.Setup(m=>
m、 AddInvoiceDetailsToBatchWriteObj(参考It.ref.IsAny,
参考它,参考IsAny)
.Callback(新的AddInvoiceCallback((参考列表批次,参考字符串详细信息)
=>
{
断言(批次包含(“测试”));
})).可验证();
//表演
新建TestClass().Execute(repoMock.Object);
}
您需要使用自定义委托类型来实现此目的。检查这个