Moq是一个匿名类型的函数
我正试图嘲笑这种方法
Task GetResultAsync(Func transformFunc)
像这样
iMock.Setup(m => m.GetResultAsync(It.IsAny<Func>())).ReturnsAsync(new { isPair = false });
测试执行调用的方法将匿名类型传递给generics参数,如下所示
instance.GetResultAsync(u => new {isPair = u == "something" }) //dont look at the function return because as generic could have diferent implementations in many case
Moq永远不会将我的GetResultAsync方法与发送的参数匹配。
我正在使用Moq 4
匿名类型会给你带来麻烦。 你需要一个具体的类型才能工作。
以下示例在我更改时起作用
instance.GetResultAsync(u => new {isPair = u == "something" })
至
instance.GetResultAsync(u => (object) new {isPair = u == "something" })
Moq无法匹配匿名类型,这就是调用时得到null
原因。
[TestClass] public class MoqUnitTest { [TestMethod] public async Task Moq_Function_With_Anonymous_Type() { //Arrange var expected = new { isPair = false }; var iMock = new Mock(); iMock.Setup(m => m.GetResultAsync(It.IsAny>())) .ReturnsAsync(expected); var consumer = new Consumer(iMock.Object); //Act var actual = await consumer.Act(); //Assert Assert.AreEqual(expected, actual); } public interface IService { Task GetResultAsync (Func transformFunc); } public class Consumer { private IService instance; public Consumer(IService service) { this.instance = service; } public async Task
如果调用GetResultAsync
的代码依赖于使用匿名类型,那么您尝试对测试执行的操作将无法使用当前设置。 您可能需要为该方法提供具体类型。
上述就是C#学习教程:Moq是一个匿名类型的函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[TestClass] public class MoqUnitTest { [TestMethod] public async Task Moq_Function_With_Concrete_Type() { //Arrange var expected = new ConcreteType { isPair = false }; var iMock = new Mock(); iMock.Setup(m => m.GetResultAsync(It.IsAny>())) .ReturnsAsync(expected); var sut = new SystemUnderTest(iMock.Object); //Act var actual = await sut.MethodUnderTest(); //Assert Assert.AreEqual(expected, actual); } class ConcreteType { public bool isPair { get; set; } } public interface IService { Task GetResultAsync (Func transformFunc); } public class SystemUnderTest { private IService instance; public SystemUnderTest(IService service) { this.instance = service; } public async Task
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/991240.html