使用 Moq,是否可以设置模拟属性以使其发生变化?
\n\n例如,给定:
\n\npublic interface IService // To be mocked.\n{\n bool IsConnected { get; }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n是否可以设置 IService 的模拟以使以下内容通过?
\n\nvar mockService = new Mock<IService>();\n\n// Setup mockService so IsConnected mutates...?\n\nbool before = mockService.Object.IsConnected;\n\nbool after = mockService.Object.IsConnected;\n\nAssert.AreNotEqual(before, after);\n
Run Code Online (Sandbox Code Playgroud)\n\n当然,这个设置并不能解决问题:
\n\nmockService.SetupGet(service => service.IsConnected).Returns(false);\nmockService.SetupGet(service => service.IsConnected).Returns(true);\n
Run Code Online (Sandbox Code Playgroud)\n\n这与我的理解是一致的,即 Moq 没有实现记录/回放模型。
\n\n这是一个更现实的例子:
\n\npublic interface IService // To be mocked.\n{\n bool IsConnected { get; }\n\n void Connect(); // Mutates IsConnected.\n}\n\nclass Client // To be tested\n{\n private readonly IService service;\n\n …
Run Code Online (Sandbox Code Playgroud)