我試圖單元測試視圖模型時遇到問題,該模型使用WhenAnyValue來偵聽屬性中的更改,並根據屬性的新值填充列表。由於與第三方軟件進行交互時,我需要使用Throttle。ReactiveUI - 使用節流閥測試訂閱
我的解決方案在生產環境中工作,但我的單元測試遇到了一些麻煩。這似乎與沒有讓測試計劃程序正確前進有關,因此實際運行油門後的訂閱。我已經創建了我的問題的簡化版本,我希望能夠說明問題。
視圖模型來測試
public class ViewModel : ReactiveObject
{
public ViewModel(IScheduler scheduler)
{
ListToBeFilled = new List<int>();
this.WhenAnyValue(vm => vm.SelectedValue)
.Throttle(TimeSpan.FromMilliseconds(500), scheduler)
.Skip(1)
.Subscribe(value =>
{
// Do a computation based on value and store result in
// ListToBeFilled.
ListToBeFilled = new List<int>() {1, 2, 3};
});
}
private string _selectedValue;
public string SelectedValue
{
get { return _selectedValue; }
set { this.RaiseAndSetIfChanged(ref _selectedValue, value); }
}
public List<int> ListToBeFilled { get; set; }
}
視圖模型試驗
[TestFixture]
[RequiresSTA]
public class ViewModelTests
{
[Test]
public void TestViewModel()
{
// Arrange
(new TestScheduler()).With(scheduler =>
{
ViewModel vm = new ViewModel(scheduler);
// Act
vm.SelectedValue = "test value";
scheduler.AdvanceByMs(1000);
// Assert
Assert.AreEqual(3, vm.ListToBeFilled.Count);
});
}
}
測試失敗說預計:3不過是0。在不使用Throttle(我需要讓事情在生產中工作)運行測試時,測試通過。我是否使用測試計劃程序錯誤?爲了消耗節流閥,我需要做些什麼?