Код внутри Moq.Setup (...). Returns (...) оценивается только один раз - PullRequest
0 голосов
/ 05 октября 2018

У меня есть поддельный объект, который передается другому Сервису.
у макета есть предмет поведения, который можно изменить внутри Сервиса или из моих модульных тестов.Тест не пройден, потому что макет не возвращает ожидаемое мной значение.Я уже разбил проблему на небольшой фрагмент LinqPad.

    void Main()
        {
            Moq.Mock<ITest> Mock = new Moq.Mock<ITest>();
            Mock.Setup(m => m.GetTestValue()).Returns(Task.FromResult(TestSubject.Value));
            TestSubject.Subscribe();
           //Setting TestSubject.Value to true
           TestSubject.OnNext(true);

           //But Mock still Returns false
           var testTask = Mock.Object.GetTestValue();
           testTask.Wait();
           testTask.Result.Dump();
        }

        public System.Reactive.Subjects.BehaviorSubject<bool> TestSubject = new System.Reactive.Subjects.BehaviorSubject<bool>(false);

        public interface ITest{
            Task<bool> GetTestValue();
        }

Редактировать: забыл подписаться на тему, но подписка не решает проблему.

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте изменить строку возврата, чтобы использовать обратный вызов:

Mock.Setup(m => m.GetTestValue()).Returns(() => Task.FromResult(TestSubject.Value));

, поскольку использование его без делегата вернет значение, которое было при вызове .Setup (false).

...