簡體   English   中英

為什么在 mokito 中未涵蓋用於驗證的代碼?

[英]Why code in not covered for verify in mokito?

這是具有保存方法的服務文件。 此方法不在代碼覆蓋范圍內。 這些存儲庫注意到但只是 jpa 存儲庫的

@Service
public class ProcessFileService {

    @Autowired
    private ProcessFileRepository processFileRepository;
    @Autowired
    private ProcessRunRepository processRunRepository;

    @Transactional
    public void save(ProcessRun processRun, List<ProcessFile> processFiles) {

        processRunRepository.save(processRun);
        for (ProcessFile processFile : processFiles) {
            processFile.setProcessRun(processRun);
            processFileRepository.save(processFile);
        }
    }

}

這是測試 class 並由 verify() 完成

@ExtendWith(MockitoExtension.class)
public class ProcessFileServiceTest {

    @Mock
    private ProcessFileRepository processFileRepository;
    @Mock
    private ProcessRunRepository processRunRepository;

    @Test
    void ProcessSave() {
        ProcessRun processRun = new ProcessRun();
        processRun.setEndDateTime("30/08/2022");
        processRun.setNumFilesFailed(1L);
        processRun.setNumFilesProcessed(1L);
        processRun.setNumFilesTransferred(1L);
        processRun.setStartDateTime("30/08/2022");

        ProcessFile processFile = new ProcessFile();
        processFile.setCurrentRetryAttempt(1);
        processFile.setFileName("file.txt");
        processFile.setSuccessfulYN(true);
        processFile.setTransferDateTime("30/08/2022");

        List<ProcessFile> processFiles = new ArrayList<ProcessFile>();
        processFiles.add(processFile);

        ProcessFileService processFileService = mock(ProcessFileService.class);

        doNothing().when(processFileService).save(processRun,  processFiles);
        processFileService.save(processRun,  processFiles);


        verify(processFileService, times(1)).save(processRun, processFiles);
    }

}

請在這里幫助我,我在這里缺少什么,我是 junit 的新手。

您在測試中模擬了您的 object,此外,在測試中的存根方法什么也不做(順便說一句,這是模擬的默認行為)。

您需要在測試中構造一個適當的 class 實例,而不是模擬它。 使用 MockitoExtension,一個簡單的方法是:

@ExtendWith(MockitoExtension.class)
public class ProcessFileServiceTest {
    
    @Mock
    private ProcessFileRepository processFileRepository;
    @Mock
    private ProcessRunRepository processRunRepository;

    @InjectMocks
    ProcessFileService processFileService

    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM