TestObserver无法在单元测试中获取数据

时间:2018-03-10 16:21:42

标签: java rx-java rx-java2

我已经为下面的课程编写了单元测试。测试中的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,超时!)

1 个答案:

答案 0 :(得分:5)

交换this.target.handleDatadataLocatorSubject.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);