我无法找到在android中对RxJava的onComplete、onNext和onError案例进行单元测试的方法。
TestSubcriber似乎解决了这个问题,但是作为RXJava的新手,我仍然不知道如何做到这一点。
MyApi.method()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<SettleCodeResponse> {
override fun onCompleted() {
}
override fun onError(e: Throwable) {
view.hideProgress()
Logger.logError(TAG, e.message)
}
override fun onNext(response: SettleCodeResponse) {
view.hideProgress()
process(response)
}
})
首先,您需要模拟myApi实例并定义myApi.method()的响应。
您可以使用TestObserver
根据响应断言接收链的不同场景。
@Test
fun test() {
//mock the response of the method
when(myApi.method()).thenReturn(Observable.just(someSettleCodeResponse())
//create a test observer and subscribe
val observable: Observable<SettleCodeResponse> = myApi.method()
val observer: TestObserver<SettleCodeResponse> = TestObserver()
observable.subscribe(observer)
//test the observer behaviour
observer.assertComplete()
.assertNoErrors()
.assertValue(someSettleCodeResponse())
}
您还可以测试整个流程,并查看是否调用了view
方法。为此,您需要模拟您的myApi
以及视图。假设代码是演示者或视图模型中方法的一部分。
@Test
fun anotherTest() {
//mock the response of the method
when(myApi.method()).thenReturn(Observable.just(someSettleCodeResponse())
//call the method you want to test
presenter.method()
//test that the view mock methods are called
verify(view).hideProgress()
}
我不确定是否要模拟静态
类,但您可以尝试这种方法吗。
首先,你必须嘲笑MyApi。
在任何课堂上
class Foo(private val view: SomeView, private val myApi: MyApi) {
fun doSomething() {
myApi.method().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<SettleCodeResponse> {
override fun onCompleted() {}
override fun onError(e: Throwable) {
view.hideProgress()
Logger.logError(TAG, e.message)
}
override fun onNext(response: SettleCodeResponse) {
view.hideProgress()
process(response)
}
})
}
}
在你的测试中
lateinit var myApi: MyApi
lateinit var view: SomeView
lateinit var foo: Foo
@Before
fun setup() {
RxAndroidPlugins.setInitMainThreadSchedulerHandler({ Schedulers.trampoline() })
MockitoAnnotations.initMocks(this)
myApi = mock(MyApi:class.java)
view = mock(SomeView::class.java)
foo = Foo(view, myApi)
}
@Test
fun testOnNext() {
given(myApi.method()).willReturn(SettleCodeResponse())
foo.doSomething()
verify(view).hideProgress()
}
我正在为cadence活动功能编写一个单元测试,它使用UUID从联系服务中检索联系人。我想知道我应该把什么样的背景加入到节奏活动中。 这是测试功能。 我收到的错误消息:
我是MongoDB的新手,正在建立一个新的应用程序。NETC#MVC项目来尝试一下。 使用当前的MongoDB。nuget的驱动程序2.2.2。 问题:我有一个单元测试成功,但不保存任何数据到MongoDB集合。 但是,如果我将相同的测试放在MVC控制器下,它将保存数据: 我很好奇为什么会这样? 以下是MongoDatabase类:
我正在编写集成测试,我想使用事务范围。我们使用EF和带有上下文的存储库。 编辑在评论中我被要求包括更多的代码,然而,我认为没有必要回答我的问题。
单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet
有没有一种方法可以让发出数据,并且当它发出数据时(或者当它完成时)以异步方式使用该数据触发? 我的问题与此非常相似,但我试图异步调用Completable。 这是我试图实现的一个微不足道的例子: 我看到订阅映射中的Completable允许我以某种方式完成这项任务,但我不知道如何以正确的方式处理它(因为在活动中不调用此方法)。 非常感谢您的帮助,谢谢!
我正在设置我的第一个Jenkins服务器来构建和测试现有的maven项目,而jenkins无法完成单元测试。 当我从命令行运行“mvn清洁安装”时,所有模块都会构建并通过它们的单元测试。然而,Jenkins只能运行第一组单元测试(通过),然后以某种方式出错。 我用的是詹金斯1.499。 以下是来自顶级pom报告插件的一些相关信息:
消息: 代码: 我尝试的: 我不知道我做错了什么,我尝试了不同的方法,比如: 1. 2. 3. 我做错了什么?
我们有一个spring组件,它将应用程序上下文设置为一个静态字段。然后从应用程序的其他部分访问该静态字段。我知道不应该使用,但有时需要从非spring管理的bean访问spring上下文。例如。字段如下所示: (取自http://www.dcalabrise.com/blog/java/spring-context-static-class/) 问题在于,当在集成测试中使用JUnit(或Spock