Moq.Setup(...)。Returns(...)内部的代码仅被评估一次

时间:2018-10-05 07:55:31

标签: delegates moq

我有一个模拟对象,该对象已传递给另一个服务。
该模拟对象具有一个行为主题,可以在服务内部或通过我的单元测试进行修改。测试失败,因为该模拟未返回我期望的值。 我已经将问题分解成一个小的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 :(得分:1)

尝试更改返回行以使用回调:

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

在没有委托的情况下使用它会返回调用.Setupfalse)时的值。