我正在尝试在只读的类中模拟自定义变量,并在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");
}
但是当返回到返回值时,它表示仍然为空。
答案 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");
}