成员不能使用实例引用访问;改为使用类型名称限定它 - Moq

本文关键字:类型 Moq getter 不能 实例 成员 访问 引用 | 更新日期: 2023-09-27 18:32:59

我有单元测试初始化:

private App fakeApp;
[TestInitialize]
public void initialize()
{
    Mock<App> mock = new Mock<App>();
    fakeApp = mock.Object;
    mock.Setup(m => m.CommLineInfo.Mode).Returns(RunMode.INSTALL);
}

其中应用是 WPF 主类:

public partial class App : Application
{
     public static CommandLine CommLineInfo { get; private set; }
}

其中下划线对象只是:

public class CommandLine
{
    public RunMode Mode
    {
        get { return Something.Mode; }
    }
}

而且我收到像主题一样的错误。我知道它可能看起来像重复,但我阅读了其他问题,但没有找到任何与模拟对象相关的解决方案

编辑:

正如Hantoun建议的那样,我需要制作包装纸:

public virtual RunMode RunMode
{
    get
    {
        return App.CommLineInfo.Mode;
    }
}

并在初始化中修改我的代码:

public void initialize()
{
    Mock<AppWrapper> mock = new Mock<AppWrapper>();
    fakeApp = mock.Object;
    mock.Setup(m => m.RunMode).Returns(RunMode.INSTALL);
}

现在它需要修改我正在测试的方法,但至少它可以工作

成员<getter>不能使用实例引用访问;改为使用类型名称限定它 - Moq

尝试静态调用 CommLineInfo 属性:

mock.Setup(m => App.CommLineInfo.Mode).Returns(RunMode.INSTALL);