我即将为我的下一个项目做出关于模拟库的决定。
因为我是那些图书馆的新手,所以我快速搜索了
我发现MOQ比NSubstitute更受欢迎,我期待社区提供更多帮助,特别是在这里
但我更喜欢NSubstitute语法,还有一个很好的docs。
所以我的问题是“我是否可以使用MOQ来实现使用NSubstitute无法实现的目标?”
答案 0 :(得分:33)
我不知道nsubstitute的任何限制
几年前,我是moq的擅长者,现在我更喜欢nsubstitute。我喜欢语法(你直接调用方法vs setup。),我认为NSubstitute具有最好的语法,并且是所有框架中最具可读性的(但这是一个主观断言^^)。
哦,也许有一点:NSubstitute没有严格的模拟模式(但我一直认为这是一个坏主意,所以我从未将其视为限制)
答案 1 :(得分:2)
我注意到,当尝试使用.Do()在NSubstitute中模拟对方法的调用时,只能将参数用作对象数组。在Moq中,您可以强制参数的数量,类型和名称。
例如:
我发现在Moq中更容易理解,因为您可以更轻松地读取参数,而不必计算其中的一个。
答案 2 :(得分:1)
https://github.com/moq/moq4#moq说:
Moq也是迄今为止第一个也是唯一一个向Mocks提供Linq的库
例如,NSubstitute
中的这种行为
var mockDateTimeProvider = Substitute.For<IDateTimeProvider>();
mockDateTimeProvider.Now.Returns(new DateTime(2020, 02, 28));
可以在Moq
中单行实现!
var mockDateTimeProvider = Mock.Of<IDateTimeProvider>(i => i.Now == new DateTime(2020, 02, 28));
您可以认为Linq to Mocks是“从模拟世界中,给我 行为与该表达式匹配的人。”