首页 > 解决方案 > 使用 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 的概念对我来说有点新鲜。我认为这可能与它有关,但我不确定。有人遇到过类似的问题吗?

标签: javaunit-testingmockitospring-webflux

解决方案


推荐阅读