故障单元测试ReactiveCommand CanExecute

时间:2014-11-19 06:59:01

标签: c# reactiveui

我遇到了一个单独测试ReactiveCommand的麻烦世界。我按照这里描述的描述ReactiveCommand CanExecute reacting to changes in a collection。应用程序正常工作 - 根据列表的内容启用或禁用按钮。

我的单元测试无法按预期工作。我有一个如下:

public void myTest()
{
    var vm = new MyViewModel();
    Assert.IsTrue(vm.Ok.CanExecute(null))

    //Do something that will invalidate the button
    Assert.IsFalse(vm.Ok.CanExecute(null))
}

此测试将立即失败。但是,如果我订阅了CanExecuteObservable,则测试的行为符合预期:

public void myTest()
{
    var vm = new MyViewModel();

    vm.Ok.CanExecuteObservable.Subscribe(x => {});

    Assert.IsTrue(vm.Ok.CanExecute(null))

    //Do something that will invalidate the button
    Assert.IsFalse(vm.Ok.CanExecute(null))
}

这是预期的行为吗?我正在使用ReactiveUI 6.2。

另外,我的单元测试显示了很多“当前线程没有与之关联的Dispatcher”,尽管我的设置中有以下内容:

[TestInitialize]
public void Init()
{
   //This line throws ...
   RxApp.TaskpoolScheduler = Scheduler.CurrentThread;
}

1 个答案:

答案 0 :(得分:1)

嗯,我是个白痴......

RxApp.MainThreadScheduler = Scheduler.CurrentThread;

一段时间后,一切都开始变得相同......