有没有一种简单的方法可以在 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 中的数据就会直接传递给它,但是这种解决方案很难阅读。