Moq:如何使用 Mock.Of<> 在对象上调用方法
Moq: How to call method on a object with Mock.Of<>
在下面的语句中,我想将 Navigation
对象的 IsNew
标志设置为 false
然后 return false
到在该对象上调用的方法 IsCurrentStepUnlocked
然而,在第 4 行,当我检索 IsNew
的值时,它是 'true'
我似乎没有得到两者,在对象上设置值并将某些东西设置为 return 预定值。
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;
导航,简单定义如下。
public class Navigation
{
public Navigation()
{
IsNew = true;
}
public bool IsNew { get; set; }
}
如何使用 Moq 设置嵌套 属性 或对其调用方法?
参考:Moq Quickstart - linq-to-mocks
假设这个例子
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;
}
}
其中方法和 属性 return 默认为真。
像这样测试结果符合预期
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);
在下面的语句中,我想将 Navigation
对象的 IsNew
标志设置为 false
然后 return false
到在该对象上调用的方法 IsCurrentStepUnlocked
然而,在第 4 行,当我检索 IsNew
的值时,它是 'true'
我似乎没有得到两者,在对象上设置值并将某些东西设置为 return 预定值。
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;
导航,简单定义如下。
public class Navigation
{
public Navigation()
{
IsNew = true;
}
public bool IsNew { get; set; }
}
如何使用 Moq 设置嵌套 属性 或对其调用方法?
参考:Moq Quickstart - linq-to-mocks
假设这个例子
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;
}
}
其中方法和 属性 return 默认为真。
像这样测试结果符合预期
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);