У меня есть фиктивный объект, который передается другой службе.
у макета есть предмет поведения, который можно изменить внутри Сервиса или из моих модульных тестов. Тест не пройден, потому что макет не возвращает ожидаемого значения. Я уже разбил проблему на небольшой фрагмент 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();
        }

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

0
abinmorth 5 Окт 2018 в 10:55

1 ответ

Лучший ответ

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

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

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

1
Andrei Tătar 5 Окт 2018 в 08:01