我找不到Moq和Rhino的特定功能比较.所有的问题都是"你更喜欢哪些以及为什么",或者"这里是你如何在犀牛中进行简单的模拟以及如何在moq中完成".
我无法在任何地方找到深刻的比较.我知道语法上的差异,我不是在寻找答案. 我正在寻找能力比较.例如:
Rhino有Expect.On()用于线程模拟.Moq可以这样做吗?
那么多模拟(用一个模拟实现多个接口).Moq可以这样做吗?
我相信Moq现在可以模拟受保护的成员.犀牛可以这样做吗?
编辑:我最后还看了一些其他.Net框架.
目前我有:
[Test]
public void DrawDrawsAllScreensInTheReverseOrderOfTheStack() {
// Arrange.
var screenMockOne = new Mock<IScreen>();
var screenMockTwo = new Mock<IScreen>();
var screens = new List<IScreen>();
screens.Add(screenMockOne.Object);
screens.Add(screenMockTwo.Object);
var stackOfScreensMock = new Mock<IScreenStack>();
stackOfScreensMock.Setup(s => s.ToArray()).Returns(screens.ToArray());
var screenManager = new ScreenManager(stackOfScreensMock.Object);
// Act.
screenManager.Draw(new Mock<GameTime>().Object);
// Assert.
screenMockOne.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(),
"Draw was not called on screen mock one");
screenMockTwo.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(),
"Draw was not called on screen mock two");
}
Run Code Online (Sandbox Code Playgroud)
但是我在生产代码中绘制对象的顺序并不重要.我可以先做一个,或者两个没关系.然而,它应该重要,因为绘制顺序很重要.
你如何(使用Moq)确保按特定顺序调用方法?
编辑
我摆脱了那个考验.draw方法已从我的单元测试中删除.我只需要手动测试它的工作原理.尽管顺序的逆转被带入了一个单独的测试类,在那里测试它并不是一件坏事.
感谢您关注的功能链接.我当然希望它能很快得到补充,非常方便.
我正在使用Moq与方法接口配对.我需要测试这个接口中的方法是按照一定的顺序执行的,也是每个方法执行一定次数的.
public interface IInterface
{
void MethodOne(string foo);
void MethodTwo(string foo);
}
Run Code Online (Sandbox Code Playgroud)
// MyClass stuff ...
public async Task Run()
{
MethodOne("foo");
MethodTwo("foo");
}
// ...
Run Code Online (Sandbox Code Playgroud)
我写了这个测试来验证方法只执行了一定次数(一次):
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.Verify(i=> i.MethodOne("foo"), Times.Once());
mock.Verify(i=> i.MethodTwo("foo"), Times.Once());
}
Run Code Online (Sandbox Code Playgroud)
这很好......
我已经尝试过这些测试来确定某个序列是否得到了适当的满足,但测试似乎总是通过.
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj …Run Code Online (Sandbox Code Playgroud)