gpt4 book ai didi

android - 测试 RxBinding RxSearchView

转载 作者:IT老高 更新时间:2023-10-28 23:36:10 27 4
gpt4 key购买 nike

背景

public Observable<List<Foo>> search(SearchView searchView) {

return RxSearchView.queryTextChanges(searchView)
.filter(charSequence -> !TextUtils.isEmpty(charSequence))
.throttleLast(100, TimeUnit.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.flatMap(this::performSearch) //Search the DB
.onErrorResumeNext(this::doSomething);
}

我正在尝试使用 AndroidJUnit4 运行器和 Mocktio 测试上述方法。

@Test
public void testSearchCallsDataManager_WhenCalled() {

String input = "abc";

when(mockSearchView.getQuery()).thenReturn(input);

searchRequestManager.search(mockSearchView).subscribe(testSubscriber); //Using standard TestSubscriber

testSubscriber.assertNoErrors();
testSubscriber.assertNotCompleted();
verify(mockDataManager).getFoos(input);
}

问题

我尝试过使用 mockSearchView 和真正的 SearchView

mockSearchView = mock(SearchView.class);
searchView = new SearchView(InstrumentationRegistry.getContext(), null);
searchView = new SearchView(InstrumentationRegistry.getTargetContext(), null);

真实对象在测试运行时,在它们的实例化过程中会导致不同的异常。模拟对象在执行过程中似乎没有任何作用。

更新

为了清楚起见:理想情况下,如果我可以模拟 SearchView 会很棒,因为我想测试在发出某些东西之后会发生什么,并且使用正确的输入调用 performSearch 方法。

最佳答案

为了测试 RxBindings,我只是简单地使用 Espresso 并将 debounce 设置为 0(去抖时间作为公共(public)静态,在 espresso setUp() 方法中我将其设置为 0 )。那么就

onView(withId(yourId)).perform(ViewActions.replaceText(to something))  

然后使用 throttleLast() 操作符验证你的 Mockito 或类似的东西。

干杯

关于android - 测试 RxBinding RxSearchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com