Mvvm 你会为Rx.Observable创建一个服务吗?
我在VM中有以下代码Mvvm 你会为Rx.Observable创建一个服务吗?,mvvm,system.reactive,Mvvm,System.reactive,我在VM中有以下代码 Observable .Timer(remainingTimeSpanForNextHour, TimeSpan.FromHours(1)) .Timestamp() .Subscribe( x => FillBookingData()); 我的问题是~ 你认为我们需要测试这个代码吗?如果我们计划测试此代码,是否会像我们正在尝试测试Rx一样?大概我
Observable
.Timer(remainingTimeSpanForNextHour, TimeSpan.FromHours(1))
.Timestamp()
.Subscribe( x => FillBookingData());
我的问题是~
测试代码总是一个好主意,但是如果您的代码都在一个方法或代码块中,那么使用可观察性可能会有点困难 您应该尝试分离此查询的组件-对我来说,有三个组件:
IObservableService
接口/实现而言,我认为这不是一件好事。相反,我会专注于编写一个或多个服务,在功能的基础上抽象出您正试图做的事情,这样您就变得枯燥无味了(不要重复自己)
因此,我认为ITimerService
可能会有用
public interface ITimerService
{
IDisposable Subscribe(TimeSpan dueTime, TimeSpan period, Action action);
}
显然,它是为配合Rx而设计的-签名类似于可观察。计时器
与IObservable交叉。订阅
。它将使用您现有的查询,只是为了使用输入参数
您应该发现测试这段代码非常容易
让我知道这是否是您的一个良好起点。测试代码始终是一个好主意,但如果您的代码都在一个方法或代码块中,使用可观察性可能会有点困难 您应该尝试分离此查询的组件-对我来说,有三个组件:
IObservableService
接口/实现而言,我认为这不是一件好事。相反,我会专注于编写一个或多个服务,在功能的基础上抽象出您正试图做的事情,这样您就变得枯燥无味了(不要重复自己)
因此,我认为ITimerService
可能会有用
public interface ITimerService
{
IDisposable Subscribe(TimeSpan dueTime, TimeSpan period, Action action);
}
显然,它是为配合Rx而设计的-签名类似于可观察。计时器
与IObservable交叉。订阅
。它将使用您现有的查询,只是为了使用输入参数
您应该发现测试这段代码非常容易
让我知道这对您来说是否是一个好的起点。测试计时器很容易使用-您可以忽略反应UI位,使用AdvanceTo并找到一种方法将您正在使用的ISScheduler注入代码中(必须为您的TestScheduler对象提供timer()和Timestamp()
尽管这看起来很痛苦,但最终的结果是,您可以立即测试通常需要时间才能执行的代码,并且您的测试每次都会有相同的结果。测试计时器很容易使用-您可以忽略反应UI位,使用AdvanceTo并找到一种方法将您正在使用的ISScheduler注入到代码中(必须为您的TestScheduler对象提供Timer()和Timestamp()) 尽管这看起来很痛苦,但最终的结果是您可以立即测试通常需要时间执行的代码,并且您的测试每次都会有相同的结果