Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Moq:如何使用Mock.Of<;对对象调用方法&燃气轮机;_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

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);