2
有了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);
是一致的我的理解,起訂量不執行記錄/回放模式。
這裏是一個小更現實的例子:
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;
}
}
我使用起訂量4.0.10827.0。
你確定你正在測試正確的東西嗎?根據我的經驗,當你嘗試做這樣的事情時,你通常在你的單位範圍之外進行測試。 =>在這種情況下:是否爲ClientTest導入測試服務?這不應該發生在ServiceTest中嗎? –
@ Team-JoKi好點。理想情況下,連接狀態將成爲DoWork測試的前提條件。理想的情況下。 – Watsontap