简体   繁体   中英

Why code in not covered for verify in mokito?

This is the service file which has save method. This method is not covering in code coverage. These repository's noting but just a jpa repository's

@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);
        }
    }

}

This is the Test class and its done by 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);
    }

}

Please help me here what is i am missing here, i am new to junit.

You mocked your object under test, and in addition, stubbed method under test to do nothing (which by the way is the default behaviour for mocks).

You need to construct a proper instance of class under test, not mock it. With MockitoExtension, a simple way to do this is:

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

    @InjectMocks
    ProcessFileService processFileService

    ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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