繁体   English   中英

Mocking 如果条件在 springboot 中使用 Mockito

[英]Mocking if condition using Mockito in springboot

我如何在 spring 引导中使用 Mockito 来模拟这种情况。

@Autowired
private Config config;

if (!config.getAllowedFileFormats().contains(FilenameUtils.getExtension(multipartFile.getOriginalFilename()) {


 }

我尝试使用它,但这似乎不起作用。

@Mock
private Config config; Mockito.when(config.getAllowedFileFormats().contains(Mockito.anyString())).thenReturn(Boolean.valueOf(true));

任何解决方案。

从功能上讲,您的代码与以下代码完全相同:

static class SomeClass {

    @Autowired
    private Config config;

    void method(MultipartFile multipartFile) {
        String filename = multipartFile.getOriginalFilename();
        Set<String> allowedFormats = config.getAllowedFileFormats();

        if (!allowedFormats.contains(FilenameUtils.getExtension(filename))) {

        }
    }
}

所以你可以:

模拟链中的每个方法:

@Test
void test() {
    Set<String> allowedFormats = new HashSet<>();
    allowedFormats.add(".exe");

    MultipartFile multipartFile = /* get your file here */ ;

    Mockito.when(multipartFile.getOriginalFilename()).thenReturn("some.exe");
    Mockito.when(config.getAllowedFileFormats()).thenReturn(allowedFormats);

    myClass.method(multipartFile);

    //verify
}

您也可以 static mock FilenameUtils.getExtension(但我认为这毫无意义,因为它是一个没有副作用的助手。

或者您可以将其提取到一个单独的方法中,然后对其进行模拟。

@Test
void test() {
    SomeClass myClassSpy = Mockito.spy(new SomeClass());
    MultipartFile multipartFile = /* get your file here */ ;
    
    Mockito.when(myClassSpy.verifyAllowedFormat(multipartFile)).thenReturn(true);

    myClassSpy.method(multipartFile);

    //verify
}




static class SomeClass {

    @Autowired
    private Config config;

    void method(MultipartFile multipartFile) {
        if (!verifyAllowedFormat(multipartFile);) {

        }
    }

    boolean verifyAllowedFormat(MultipartFile file) {
        return config.getAllowedFileFormats()
                     .contains(FilenameUtils.getExtension(multipartFile.getOriginalFilename()));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM