gpt4 book ai didi

c# - 使用 Moq 模拟带有条件参数的方法

转载 作者:行者123 更新时间:2023-11-30 14:15:13 25 4
gpt4 key购买 nike

我有一个正在单元测试的类,以验证特定的异常情况是否得到妥善处理。为此,我模拟了内部调用的抛出异常的方法。

我的模拟设置如下所示:

fr.CallBase = true;
fr.Setup(m => m.PutFile(It.IsAny<IFileConnection>(), It.IsAny<string>(), It.IsAny<string>()))
.Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException()));

这正是我想要它做的。

但是,现在我想通过仅针对特定值抛出异常来测试连续性。我认为它应该是这样的:

fr.Setup(m => m.PutFile(It.IsAny<IFileConnection>(), It.Is<string>(a => a == "foo2.txt"), It.IsAny<string>()))
.Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException()));

...但这似乎不起作用。我做错了什么?

每个请求,整个测试:

[Test]
public void ManualRouteInterruptedInDownloadContinuesOn()
{
var firstRoute = this.UnitOfWork.GetFirstRoute();
Route r = this.UnitOfWork.GetRouteByID(firstRoute.RouteID);
r.RegExMatch = "^foo\\d.txt$";
r.Manual = true;
r.NotifyOfNewFiles = "me@company.com";
this.UnitOfWork.Save();

var fr = new Mock<ManualRouting>(r.RouteID);
fr.CallBase = true;
fr.Setup(m => m.GetFile(It.IsAny<IFileConnection>(), It.Is<string>(a => a == "foo2.txt"), It.IsAny<string>()))
.Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException()));

fr.Object.ExecuteRoute(firstRoute.RouteID);
Assert.IsTrue(fr.Object.Errors.Count == 1);
Assert.IsTrue(fr.Object.Matches.Count == 3);
}

最佳答案

有人在评论里建议我试试

It.Is<string>(a => Equals(a, "foo2.txt"))

他列举了泛型的一些奇怪之处。我不知道它是否与泛型有任何关系,但这个改变确实有效。由于发帖者删除了他的评论,我将代替他回答。

关于c# - 使用 Moq 模拟带有条件参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389319/

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