代码之家  ›  专栏  ›  技术社区  ›  user1184100

TestObserver在单元测试中未获取数据

  •  1
  • user1184100  · 技术社区  · 7 年前

    我已经为下课写了单元测试。测试中的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(闩锁=1,值=0,错误=0,完成=0,超时!)

    1 回复  |  直到 7 年前
        1
  •  9
  •   akarnokd    7 年前

    交换订单 this.target.handleData dataLocatorSubject.subscribe 线 PublishSubject 不会保留通过的项目,因此迟到的订阅者不会看到以前的任何项目 onNext 'd个项目。

    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);