C#与2017模拟var属性内部返回

时间:2019-06-14 19:37:18

标签: c# properties mocking nsubstitute

我正在尝试在只读的类中模拟自定义变量,并在get内返回。

public class BaseController
{
    public string Local
    {
        return GlobalVariable.Local
    }
}

[TestMethod]
public void TestMethod()
{
    var baseControllerMock = Substitute.For<BaseController>();
    baseControllerMock.Local.Returns("local");
}

我的问题是,即使当我使用ReturnForAnyArgs进入返回值时,我也很累寻找全局变量,并且由于

而中断
  

System.NullReferenceException:“对象引用未设置为对象的实例。”因为GlobalVariable为空。

我也尝试模拟全局变量

[TestMethod]
public void TestMethod()
{
    var baseControllerMock = Substitute.For<BaseController>();
    var globalVarMock = Substitute.For<GlobalVariable>();
    globalVarMock.Local.returns("local");
    baseControllerMock.Local.Returns("local");
}

但是当返回到返回值时,它表示仍然为空。

1 个答案:

答案 0 :(得分:0)

尝试制作BaseController.Locale virtual

NSubstitute仅可与overridable members of classes一起使用。如果将NSubstitute.Analyzers添加到测试项目中,将有助于检测在编译时无法替换的案例。


从评论中编辑:该测试对我来说没有错误:

    public static class GlobalVariable { public static string Local = "hi"; }
    public class BaseController
    {
        public virtual string Local { get { return GlobalVariable.Local; } }
    }
    [TestMethod]
    public void TestMethod() {
        var baseControllerMock = Substitute.For<BaseController>();
        baseControllerMock.Local.Returns("local");
    }