Я новичок в ReactiveUI и пытаюсь протестировать модель представления, которая выглядит так:
public interface IService
{
Task<SessionModel> GetData(string id);
}
/// Provides a group of schedulers available to be used
public interface ISchedulers
{
IScheduler Default { get; }
IScheduler Dispatcher { get; }
}
public class MyVm : ReactiveObject
{
IService service;
public MyVm(ISchedulers schedulers, IService service)
{
this.service = service;
this.session = this.WhenAnyValue(x => x.SessionId)
.SelectMany(SearchSession)
.ObserveOn(schedulers.Default)
.ToProperty(this, x => x.Session);
}
private async Task<SessionModel> SearchSession(string id)
{
return await this.service.GetData(id);
}
private string sessionId;
public string SessionId
{
get => sessionId;
set => this.RaiseAndSetIfChanged(ref sessionId, value);
}
readonly ObservableAsPropertyHelper<SessionModel> session;
public SessionModel Session
{
get { return session.Value; }
}
}
public class SessionModel { }
Я издеваюсь над служебным вызовом, чтобы вернуть фиктивные данные, но не уверен, что мне нужно сделать с TestScheduler
, чтобы заставить SelectMany
работать.
Вот тестовый класс, который показывает, как я могу создать тест для модели представления. Цель состоит в том, чтобы в конечном итоге проверить, что модель установлена:
[TestClass]
public class MyVmTests
{
[TestMethod]
public void CreateClass
{
var subject = new MyVm(/*pass in mocks*/);
subject.SessionId="test";
Assert.IsNotNull(subject.Session);
}
}
ISchedulers
? - person Shlomo   schedule 23.10.2018TestScheduler
. в реальном коде он возвращаетSystem.Reactive.Concurrency.Scheduler.Default
. - person cliff   schedule 23.10.2018RaiseAndSetIfChanged
- person cliff   schedule 23.10.2018