java - 使用 Mockito 测试 Spring WebFlux
问题描述
我正在尝试测试一个返回对象的 Flux 但它不起作用的用例。这是用例实现的接口:
public interface Import {
Flux<ImportedData> execute(List<InputParams> params, int importId);
}
如果我模拟这个params
参数,它总是返回一个 NPE:Mockito 说映射器返回了一个 null Publisher。
但是当我使用params
参数 asMockito.any()
时,它工作正常。该any()
方法不适用于我,因为我必须测试特定情况。
这是测试代码:
@RunWith(MockitoJUnitRunner.class)
public class ImportTests {
@Mock
private Import import;
private SortData sortData;
private final int importId = 1;
@Before
public void init() {
//this is not working
when(this.import.execute(getInputParams(), this.importId)).thenReturn(MockResults.getImportedData());
//this works
when(this.import.execute(Mockito.any(), eq(this.importId))).thenReturn(MockResults.getImportedData());
this.sortData = new SortData(this.import);
}
@Test
public void sortTest() {
List<RawData> sortedRawData = new ArrayList();
//this is where the NPE occurs
this.sortData.execute().subscribe(sortedRawData::add);
//Assert.equals()...;
}
private List<InputParams> getInputParams() {
InputParams input1 = new InputParams(1, "someThing", 2);
InputParams input2 = new InputParams(2, "someThing", 4);
InputParams input3 = new InputParams(3, "someThing", 5);
return Array.asList(input1, input2, input3);
}
}
WebFlux 的概念对我来说有点新鲜。我认为这可能与它有关,但我不确定。有人遇到过类似的问题吗?
解决方案
推荐阅读
- api - 关于亚马逊广告 API
- amazon-web-services - docker重启,想找原因
- microservices - 如何在 ECS 上运行 Infinispan?
- php - Laravel 社交名媛通过 google 登录刷新令牌为空
- keras - Keras中的地图功能
- python - 我应该实时更新我的训练数据吗?
- reactjs - 如何在 ReactJS 上为组件对象设置类名?
- android - 为什么使用 dp 的小部件很小
- wordpress - 更改此 elementor 滑块的视频背景
- html-lists - 如何在嵌套列表中使用自动枚举器 (reStructuredText)