C# Moq:如何使用Mock.Of<;对对象调用方法&燃气轮机;
在下面的语句中,我想将C# Moq:如何使用Mock.Of<;对对象调用方法&燃气轮机;,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,在下面的语句中,我想将Navigation对象的IsNew标志设置为false,然后还将false返回到在该对象上调用的方法IsCurrentStepUnlocked 但是,在第4行,当我检索到IsNew的值时,它是“true” 我似乎无法同时获得这两个值,设置对象的值,并设置返回预定值的内容 1. var mockStatementInformation = Mock.Of<IStatementInformation>(); 2. mockStatementInformation.
Navigation
对象的IsNew
标志设置为false
,然后还将false
返回到在该对象上调用的方法IsCurrentStepUnlocked
但是,在第4行,当我检索到IsNew
的值时,它是“true”
我似乎无法同时获得这两个值,设置对象的值,并设置返回预定值的内容
1. var mockStatementInformation = Mock.Of<IStatementInformation>();
2. mockStatementInformation.Navigation = new Navigation { IsNew = false };
3. Mock.Get(mockStatementInformation).Setup(x => x.Navigation.IsCurrentStepUnlocked()).Returns(false);
4. var isNew = mockStatementInformation.Navigation.IsNew;
如何使用Moq设置嵌套属性或对其调用方法 参考:
假设这个例子
public interface IStatementInformation {
Navigation Navigation { get; set; }
}
public class Navigation {
public Navigation() {
IsNew = true;
}
public virtual bool IsNew { get; set; }
public virtual bool IsCurrentStepUnlocked() {
return true;
}
}
其中,默认情况下,方法和属性都返回true
当像这样测试时,结果与预期一致
var mockStatementInformation = Mock.Of<IStatementInformation>(m =>
m.Navigation == new Navigation { IsNew = false } &&
m.Navigation.IsCurrentStepUnlocked() == false
);
Assert.IsFalse(mockStatementInformation.Navigation.IsCurrentStepUnlocked());
Assert.IsFalse(mockStatementInformation.Navigation.IsNew);
var mockStatementInformation=Mock.Of(m=>
m、 导航==新导航{IsNew=false}&&
m、 Navigation.IsCurrentStepUnlocked()=false
);
Assert.IsFalse(mockStatementInformation.Navigation.IsCurrentStepUnlocked());
Assert.IsFalse(mockStatementInformation.Navigation.IsNew);
IsNew仍然返回true,我在代码下面添加了一条语句,如var IsNew=mockStatementInformation.Navigation.IsNew;验证。用上述答案中的内容替换第1-3行。我测试了它,它返回false
Ok,看来IsNew属性必须是虚拟的,一旦我添加了虚拟属性,结果就如预期的那样。非常感谢。
var mockStatementInformation = Mock.Of<IStatementInformation>(m =>
m.Navigation == new Navigation { IsNew = false } &&
m.Navigation.IsCurrentStepUnlocked() == false
);
Assert.IsFalse(mockStatementInformation.Navigation.IsCurrentStepUnlocked());
Assert.IsFalse(mockStatementInformation.Navigation.IsNew);