Moq - 使用MockRepository.Verify()与时间

时间:2017-04-30 03:54:57

标签: moq

我正在寻找是否可以在模拟属性的设置中指定Times枚举值,然后可以通过Assert块中的MockRepository.Verify()方法执行该操作。我的AAA风格测试。我当前的代码如下所示:

        // Arrange
        var repository = new MockRepository(MockBehavior.Default);

        var mockLogin = repository.Create<Login>();
        mockLogin.SetupProperty(d => d.LoginID, 1515254);

        var mockIApplicationEventLogService = repository.Create<IApplicationEventLogService>();
        mockIApplicationEventLogService.Setup(d => d.InsertApplicationEventLog(It.IsAny<ApplicationEventLog>())).Verifiable();

        var mockILoginResetFailedService = repository.Create<ILoginResetFailedService>();
        mockILoginResetFailedService.Setup(d => d.GetLoginResetFailedByLoginID(It.IsAny<int>())).Returns((LoginResetFailed)null);

        var mockApplicationEventLog = repository.Create<ApplicationEventLog>();
        mockApplicationEventLog.SetupAllProperties();

        var LoginWorkflowService = new LoginWorkflowService()
        {
            ApplicationEventLogService = mockIApplicationEventLogService.Object,
            ApplicationEventLog = mockApplicationEventLog.Object,
            LoginResetFailedService = mockILoginResetFailedService.Object
        };

        // Act 
        var result = LoginWorkflowService.CheckLoginResetFailuresLock(mockLogin.Object, It.IsAny<Guid>(), It.IsAny<SecurityPolicy_Aggregate>(), It.IsAny<string>(), It.IsAny<string>());

        // Assert
        result.Should().BeTrue();
        mockIApplicationEventLogService.Verify(d => d.InsertApplicationEventLog(It.IsAny<ApplicationEventLog>()), Times.Never);

我希望能够做的是在最后调用repository.Verify(),但是使用我当前的代码,Verify()调用将期望调用InsertApplicationEventLog,而实际上我希望它从未被召唤过。我已经尝试将Times.Never传递给mockIApplicationEventLogService的Setup方法,但它似乎没有一个方法覆盖它。如果我的存储库中存在永远不应该被调用的模拟,或者有解决方法,我是否仅限于单独的Verify()调用?

1 个答案:

答案 0 :(得分:0)

似乎Nkosi说,现在不可能这样做。以下网址提出了此请求:

https://github.com/moq/moq4/issues/373