我有一个模拟对象,该对象已传递给另一个服务。
该模拟对象具有一个行为主题,可以在服务内部或通过我的单元测试进行修改。测试失败,因为该模拟未返回我期望的值。
我已经将问题分解成一个小的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 :(得分:1)
尝试更改返回行以使用回调:
Mock.Setup(m => m.GetTestValue()).Returns(() => Task.FromResult(TestSubject.Value));
在没有委托的情况下使用它会返回调用.Setup
(false
)时的值。