c # vs 2017 mocking var свойство с возвратом внутри - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь смоделировать пользовательскую переменную внутри класса, которая доступна только для чтения и имеет возвращаемый результат внутри get.

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

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

Моя проблема в том, что даже если я использую ReturnsForAnyArgs, когда он входит внутрь return, я устал искать глобальную переменную, и она ломается, потому что

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 голосов
/ 16 июня 2019

Попробуйте сделать BaseController.Locale virtual.

NSubstitute может работать только с переопределяемыми членами классов . Если вы добавите 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");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...