代码之家  ›  专栏  ›  技术社区  ›  abinmorth

Moq.Setup(…)中的代码。返回(…)只计算一次

  •  0
  • abinmorth  · 技术社区  · 7 年前

    我有一个模拟对象,它被传递给另一个服务。
    mock有一个行为主题,可以在服务内部或从我的单元测试中修改。测试失败,因为mock没有返回我期望的值。

        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 回复  |  直到 7 年前
        1
  •  1
  •   Andrei Tătar    7 年前

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

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

    这是因为在没有委托的情况下使用它将返回它在 .Setup 被称为( false ).