0
我有一個類的函數返回一個基於類屬性的狀態值。在這個例子中,如果Name不爲null,我希望HasName()返回true。我可以簡單地做Returns(false)
,但是我希望它評估爲lambda,以便在測試過程中修改Name的情況下它可以正常工作。Moq的參考成員lambda
public interface IThing
{
string Name { get; set; }
bool HasName();
}
var mocks = new Dictionary<string, IThing>();
Mock<IThing> mockThing;
mockThing = new Mock<IThing>();
mockThing.SetupProperty(m => m.Name, "test");
mockThing.Setup(m => m.HasName()).Returns(() =>
{
return mockThing.Object.Name != null;
});
mocks["first"] = mockThing.Object;
mockThing = new Mock<IThing>();
mockThing.SetupProperty(m => m.Name, "test");
mockThing.Setup(m => m.HasName()).Returns(() =>
{
return mockThing.Object.Name != null;
});
mocks["second"] = mockThing.Object;
Console.WriteLine(mocks["first"].HasName());
mocks["first"].Name = null;
Console.WriteLine(mocks["first"].HasName());
第二個Console.WriteLine由於作用域(引用第二個模擬)而打印true而不是false。實際上,Resharper抱怨「訪問修改後的關閉」。什麼是正確的方法來做到這一點?
這並不在我有限的例子的工作,但我意識到,我的問題更多的是與作用域。我添加了多個mock,lambda中的範圍是一個問題。我通過更好的演示更新了我的示例。 – wtjones
我已經更新了我的答案 – nemesv
這對我很有用。我還能夠在foreach循環中創建模擬,只要我在每次迭代時將密鑰分配給新的變量。 謝謝! – wtjones