我有一个 ObservableBoolean,它是一个非常简单的数据容器,包装了一个原始 boolean 值。我想使用 JUnit/Mockito 来验证原始 boolean 值是否更改为 true 后跟 false。我正在像这样设置一个模拟 OnPropertyChangedCallback:
Observable.OnPropertyChangedCallback loadingCallback = mock(Observable.OnPropertyChangedCallback.class);
viewModel.loading.addOnPropertyChangedCallback(loadingCallback);
然后我正在运行被测代码:
loading.set(true);
loading.set(false);
这些调用中的每一个都会触发 loadingCallback 上的 onPropertyChanged 方法,将相同 ObservableBoolean 实例作为参数传递。
我试过使用 ArgumentCaptor 和自定义 ArgumentMatcher。这两种方法都成功地表明 onPropertyChange 方法已被调用两次,但是,它们都没有保留 ObservableBoolean 中原始 boolean 值发生的历史记录。相反,我只能看到其上设置的最新值,这是错误的。
如何保留 ObservableBoolean 中原始 boolean 值发生的历史记录?同样,我只需要验证它是否设置为 true,然后是 false。
最佳答案
您可以创建一个 stub ,它实现Observable.OnPropertyChangedCallback
并记录调用,然后为这些记录的调用提供公共(public)访问器。然后,您的测试将在断言时对这些记录的调用使用公共(public)访问器。
例如:
OnPropertyChangedCallbackStub loadingCallback = new OnPropertyChangedCallbackStub();
viewModel.loading.addOnPropertyChangedCallback(loadingCallback);
// invoke the code-under-test which, internally, invokes ...
// loading.set(true);
// loading.set(false);
assertTrue(2, loadingCallback.recordedInvocations().size());
assertTrue(loadingCallback.recordedInvocations().contains(true));
assertTrue(loadingCallback.recordedInvocations().contains(false));
关于java - JUnit/Mockito - 如何捕获参数字段的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47274724/