相关疑难解决方法(0)

Moq和Rhino.mocks有什么功能?

我找不到Moq和Rhino的特定功能比较.所有的问题都是"你更喜欢哪些以及为什么",或者"这里是你如何在犀牛中进行简单的模拟以及如何在moq中完成".

我无法在任何地方找到深刻的比较.我知道语法上的差异,我不是在寻找答案. 我正在寻找能力比较.例如:

  • Rhino有Expect.On()用于线程模拟.Moq可以这样做吗?

  • 那么多模拟(用一个模拟实现多个接口).Moq可以这样做吗?

  • 我相信Moq现在可以模拟受保护的成员.犀牛可以这样做吗?

编辑:我最后还看了一些其他.Net框架.

rhino-mocks moq typemock mocking nmock2

44
推荐指数
1
解决办法
5797
查看次数

如何使用Moq测试方法调用顺序

目前我有:

    [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方法已从我的单元测试中删除.我只需要手动测试它的工作原理.尽管顺序的逆转被带入了一个单独的测试类,在那里测试它并不是一件坏事.

感谢您关注的功能链接.我当然希望它能很快得到补充,非常方便.

c# unit-testing moq

28
推荐指数
3
解决办法
2万
查看次数

模拟方法执行时间和顺序

我正在使用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)

.net c# moq

6
推荐指数
2
解决办法
2160
查看次数

标签 统计

moq ×3

c# ×2

.net ×1

mocking ×1

nmock2 ×1

rhino-mocks ×1

typemock ×1

unit-testing ×1