如何使用 Moq 测试方法调用顺序 [英] How to test method call order with Moq

查看:31
本文介绍了如何使用 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");
    }

但是我在生产代码中绘制对象的顺序无关紧要.我可以先做一个,或者两个都没关系.但是,这应该很重要,因为绘制顺序很重要.

But the order in which I draw my objects in the production code does not matter. I could do one first, or two it doesn't matter. However it should matter as the draw order is important.

您如何(使用 Moq)确保方法按特定顺序调用?

How do you (using Moq) ensure methods are called in a certain order?

编辑

我摆脱了那个测试.draw 方法已从我的单元测试中删除.我只需要手动测试它是否有效.顺序的颠倒虽然被带到一个单独的测试类中进行测试,所以它并不全是坏的.

I got rid of that test. The draw method has been removed from my unit tests. I'll just have to manually test it works. The reversing of the order though was taken into a seperate test class where it was tested so it's not all bad.

感谢提供有关他们正在研究的功能的链接.我当然希望它尽快添加,非常方便.

Thanks for the link about the feature they are looking into. I sure hope it gets added soon, very handy.

推荐答案

目前似乎尚未实施.请参阅问题 24:MockSequence.该线程讨论了这个问题.

It appears that it's not currently implemented. See Issue 24: MockSequence. This thread discusses the issue.

不过,您可能会考虑修改测试.我通常觉得测试顺序会导致测试脆弱,因为它经常测试实现细节.

You might consider revising your tests, though. I generally feel that testing order leads to fragile tests, as it's often testing implementation details.

我不确定这是否解决了 OP 的问题.Lucero 的回答可能更有帮助.

I'm not sure that this addresses the OP's question. Lucero's answer may be more helpful.

这篇关于如何使用 Moq 测试方法调用顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆