gpt4 book ai didi

c# - 基于 Moq 的单元测试中的 TargetParameterCountException

转载 作者:行者123 更新时间:2023-11-30 16:36:08 24 4
gpt4 key购买 nike

我们的存储库具有“保存”方法。每当保存实体时,它们还会引发“已创建”事件。

我们一直在尝试使用 Moq 来模拟存储库......

var IRepository = new Mock<IRepository>();
Request request = new Request();
IRepository.Setup(a => a.Save(request)).Raises(a => a.Created += null, RequestCreatedEventArgs.Empty);

这似乎行不通,我总是遇到异常:

System.Reflection.TargetParameterCountException: Parameter count mismatch.

任何使用 Moq 模拟事件的示例都会有所帮助。

最佳答案

标准事件类型委托(delegate)通常有两个参数:发送者对象和 EventArgs 对象的子类。 Moq 期望您的事件有此签名,但只找到一个参数,这会导致异常。

看看这段代码,加上我的评论,它应该可以工作:

    public class Request
{
//...
}

public class RequestCreatedEventArgs : EventArgs
{
Request Request {get; set;}
}

//=======================================
//You must have sender as a first argument
//=======================================
public delegate void RequestCreatedEventHandler(object sender, RequestCreatedEventArgs e);

public interface IRepository
{
void Save(Request request);
event RequestCreatedEventHandler Created;
}

[TestMethod]
public void Test()
{
var repository = new Mock<IRepository>();
Request request = new Request();
repository.Setup(a => a.Save(request)).Raises(a => a.Created += null, new RequestCreatedEventArgs());

bool eventRaised = false;
repository.Object.Created += (sender, e) =>
{
eventRaised = true;
};
repository.Object.Save(request);

Assert.IsTrue(eventRaised);
}

关于c# - 基于 Moq 的单元测试中的 TargetParameterCountException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com