我已经为下面的课程编写了单元测试。测试中的TestObserver无法接收任何数据。我对于需要做什么一无所知。
public class DataLocationMonitor {
private PublishSubject<Object> dataLocatorSubject;
public DataLocationMonitor(...) {
this.dataLocatorSubject = PublishSubject.create();
}
public Observable<Object> getObservable() {
return this.dataLocatorSubject;
}
public void handleData(Object data) {
if (data instanceof DataMessage) {
DataMessage message = new DataMessage(...);
this.dataLocatorSubject.onNext(message);
}
}
}
@RunWith(MockitoJUnitRunner.class)
public class DataLocationMonitorTest {
private DataLocationMonitor target;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.target = new DataLocationMonitor(...);
}
@Test
public void handleData_dataLocatorSubjectOnNextCalled() {
TestObserver<Object> observer= TestObserver.create();
Observable<Object> dataLocatorSubject = this.target.getObservable();
DataMessage data = new DataMessage();
this.target.handleData(data);
dataLocatorSubject.subscribe(observer);
observer.assertSubscribed();
observer.awaitCount(1);
observer.assertValueCount(1);
}
}
当我运行测试时,我得到java.lang.AssertionError:值计数不同;预期:1,实际:0(latch = 1,值= 0,错误= 0,完成= 0,超时!)
答案 0 :(得分:5)
交换this.target.handleData
和dataLocatorSubject.subscribe
行的顺序。 PublishSubject
不会保留通过的商品,因此已故订阅者不会看到之前的onNext
个商品。
TestObserver<Object> observer= TestObserver.create();
Observable<Object> dataLocatorSubject = this.target.getObservable();
DataMessage data = new DataMessage();
// subscribe first
dataLocatorSubject.subscribe(observer);
// signal next
this.target.handleData(data);
observer.assertSubscribed();
observer.awaitCount(1);
observer.assertValueCount(1);