Web Analytics
yangyang

码农兼一个普普通通小青年

Observable


Reactive Extensions入门(6):使用Rx进行单元测试

Rx本身就是一个功能强大的测试框架。本文将介绍如何使用Rx模拟异步方法调用返回预定的值来辅助针对一步方法调用的单元测试。Rx可以模拟经过一段预定时间返回结果的异步方法,从而简化了异步处理方法的测试。Rx也可以模拟异步方法返回错误的场景,使得代码测试可以覆盖多有的用例。本文将介绍Rx中的TestSheduler方法,他可以模拟耗时的异步操作,但是能在测试的时候能够立即执行。 1. 模拟异步方法 开发者可能会对测试与时间有关的异步方法会感到头疼。与测试同步方法不同,异步方法不仅需要返回需要的值,而且还要能够模拟出方法耗时以及延迟的效果。 有很多工具能够用来测试同步方法,但是测试异步方法则需要一定的技巧。我们可以使用Thread.Sleep()来模拟需要长时间执行的方法,但是该方法能用来测试的时间用例非常粗糙,在有些对执行时间要求比较高的场景,Thread. …

Reactive Extensions Rx Observable Scheduler UnitTest

Reactive Extensions入门(5):ReactiveUI MVVM框架

从前面几篇文章可以了解到,Rx作为LINQ的一种扩展,极大地简化了异步编程。但Rx的用法不仅如此,由于其可高的扩展性,在其他很多方面也有所应用。 在前面例子中,我们使用代码和UI界面上的元素打交道,这种方式在传统的Winfom编程中很常见,但是在基于XAML构造的界面这种应用程序中,这样显得不是非常友好,XAML中声明式编程可以使得程序更加简洁,传统的方式没有利用到XAML中强大的绑定功能。之前,我们大量使用了诸如Observable.FromEvent这样的操作,然后来使用后台代码来设置控件的属性,这都是传统的编程方式。 当然,对于规模较小的程序来说,这种方式无可厚非。这种方式的最大的缺点在于,对于测试很不友好,要测试这样的应用程序很困难,我们需要创建UI控件并模拟输入,这样效率不高而且不可靠。另一个缺点是,这种方式使得代码高度耦合而且脆弱。针对这些问题,一种 …

Reactive Extensions Rx Observable ReactiveUI MVVM

Reactive Extensions入门(4):Rx实战

Reactive Extensions(Rx)的优点在于能够将传统的异步编程方式从支离破碎的代码调用中解放出来。传统的采用回调的异步编程方式会使得代码很零散,尤其是异步嵌套异步的时候,代码块很难管理。这个和一般的编程语言不推荐使用goto语句的原因是一样的。Rx能够使的我们可以将异步代码写到一个单独的方法中,使得代码可读性和可维护性大大增强。 前一篇文章中我们了解了Rx中的一些比较重要的操作符。本文中我们将会学习如何将这些应用到我们的应用程序中。 1. 异步调用 在开始讨论异步调用之前,我们来看看同步调用。下面的代码是一个简单的Console程序。 static void Main(string[] args) { int x = 4; int y = 5; int z = PlusTwoNumber(x, y); …

Reactive Extensions Rx Observable

Reactive Extensions入门(3):Rx操作符

在第一篇文章里讲过,Reactive Extensions(Rx)是对LINQ的一种扩展,其关键的特性在于他不是基于IEnumerable接口的,Rx是基于IObservable接口,这个接口用来迭代Observable集合。自然Observable集合是基于观察者模式设计的。Observable模式的关键在于被观察的对象有一些行为或者属性,观察者可以注册某些感兴趣的属性或者行为。当被观察者发生状态改变时,会通知观察者(通常是发起一个事件)。 观察者模式是发布和订阅模式(Publish and Subscribe Pattern)的一个子集,发布者可以产生一些告知其订阅者他的一些状态信息。在Rx中Observable集合有订阅者,简单来说,就是观察Observable集合的行为,称之为对象订阅了这一集合。 在Rx中,Observable集合在有新的元素添加到集合 …

Reactive Extensions Rx Observable

  • 1