3

有没有一种简单的方法可以在 Objectbox 中模拟观察者?更具体地说,我希望在数据更改时调用我的观察者。例子:

private DataSubscription listen() {
    return addressBoxStore.query()
            .equal(Address_.address, address)
            .build()
            .subscribe()
            .on(AndroidScheduler.mainThread())
            .onError(this::handleError)
            .observer(observeAddress());
}

private DataObserver<List<Address>> observeAddress() {
    return addresses -> {
        // should only be one address
        if (!addresses.isEmpty()) {
            // Run some code here
        }
    };
}

鉴于上述观察者已注册,我想添加一个 junit 测试以确保我的自定义代码在数据更改时由 Objectbox 调用。有没有办法使用一些自定义数据触发在junit单元测试中发生的事件,以便我可以验证一些自定义行为?

一种方法是模拟构建器对象(下面的示例),但这变得很难看。有更好的解决方案吗?

private void givenAddress(Answer answers) {
    when(subscriptionBuilder.observer(any(DataObserver.class))).then(answers);
    when(query.subscribe()).thenReturn(subscriptionBuilder);
    when(queryBuilder.build()).thenReturn(query);
    when(subscriptionBuilder.on(any())).thenReturn(subscriptionBuilder);
    when(subscriptionBuilder.onError(any())).thenReturn(subscriptionBuilder);
    when(queryBuilder.equal(any(Property.class), eq(ADDRESS))).thenReturn(queryBuilder);
    when(addressBox.query()).thenReturn(queryBuilder);

    underTest = new ClassToTest(addressBox);
}

这意味着一旦添加了观察者,Answer 中的数据就会直接传递给它,但是这种解决方案很难阅读。

4

0 回答 0