Moq を使用すると、モックされたプロパティを設定して変更することはできますか?
たとえば、次のようになります。
public interface IService // To be mocked.
{
bool IsConnected { get; }
}
次のように IService のモックをセットアップすることは可能ですか?
var mockService = new Mock<IService>();
// Setup mockService so IsConnected mutates...?
bool before = mockService.Object.IsConnected;
bool after = mockService.Object.IsConnected;
Assert.AreNotEqual(before, after);
確かに、この設定ではうまくいきません:
mockService.SetupGet(service => service.IsConnected).Returns(false);
mockService.SetupGet(service => service.IsConnected).Returns(true);
これは、Moq が記録/再生モデルを実装していないという私の理解と一致しています。
もう少し現実的な例を次に示します。
public interface IService // To be mocked.
{
bool IsConnected { get; }
void Connect(); // Mutates IsConnected.
}
class Client // To be tested
{
private readonly IService service;
public Client(IService service)
{
this.service = service;
}
public bool DoWork()
{
if (!service.IsConnected) // In test, IsConnected should return false.
{
service.Connect();
}
if (!service.IsConnected) // In test, IsConnected should return true.
{
return false;
}
// ... yada yada yada more code
return true;
}
}
Moq 4.0.10827.0 を使用しています。