2016-12-07 31 views
1

在下面的语句,我想给Navigation对象的IsNew标志设置为false,然后也返回到false调用的对象上的方法IsCurrentStepUnlocked起订量:如何调用方法的对象上Mock.Of <>

然而,在第4行,当我取回的IsNew的价值,它是“真正的”

我似乎并没有得到双方,设置对象,并设置东西就值返回预定值。

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调用方法?

+0

谢谢你,我做了一些变化建议。 – billboard

回答

1

参考: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; 
    } 
} 

如果双方的方法和属性的返回默认值是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); 
+0

这仍然为IsNew返回true,我在代码下面添加了一条语句,如下所示var isNew = mockStatementInformation.Navigation.IsNew;核实。 – billboard

+0

用上面的答案替换第1 - 3行。我测试了它,它返回'false' – Nkosi

+0

好吧,看来IsNew属性必须是虚拟的,一次,我添加虚拟结果是预期的。谢谢 – billboard

相关问题