簡體   English   中英

JUnit 遞歸測試 function(創建文件並比較大小)

[英]JUnit test on recursive function (creating file and compare size)

我正在做一個項目:復制一個文件並檢查大小是否相等。 如果沒有,刪除文件並重做(定義重試次數)

public boolean copieFichierAvecRetry(FileObject copieFichierFile, FileObject fichierACopier, int nbRetry, int currentNbRetry)
        throws InterruptedException, IOException {
    logger.logInfo("Deplacement du fichier " + fichierACopier.getName().getBaseName(),
            "de " + fichierACopier.getParent().getName().getPath() + " vers "
                    + copieFichierFile.getParent().getName().getPath());
    copieFichierFile.copyFrom(fichierACopier, Selectors.SELECT_SELF);
    boolean tailleOk = false;
    // Si le flag de vérification est à true on vérifie que les fichiers
    // copies ont la même taille
    try {
        tailleOk = verificationTailleCorrespondantes(copieFichierFile, fichierACopier);
        if (!tailleOk && currentNbRetry <= nbRetry){
            logger.logInfo("Erreur lors de la verification de la taille, essai n°" + currentNbRetry, null);
            copieFichierFile.delete();
            currentNbRetry++;
            copieFichierAvecRetry(copieFichierFile, fichierACopier, nbRetry, currentNbRetry);
        }
    } catch (IOException e) {
        logger.logWarn("Erreur lors de la verification de la taille : ", e.getMessage());
        tailleOk = false;
    }
    return tailleOk;
}

這是非遞歸 function 的單元測試:

public void testCopieFichier()
        throws IOException, InterruptedException, URISyntaxException, TransfertFichierException {
    socleUtil.setNbTentativeMaxTransfert(1);
    String nomFichierSource = "test123.txt";
    String nomFichierDestination = "testDownloadSuccess.xml";

    File fileOrigine = new File(getClass().getResource(SocleConstantes.SLASH).getFile());
    String cheminFichierDistantOrigine = fileOrigine.getPath();
    File fileDestination = new File(getClass().getResource(SocleConstantes.SLASH).toURI());
    String cheminFichierDistantDestination = fileDestination.getPath() + FILE_SEPARATOR + "download";

    assertTrue(socleUtil.copieFichier(
            socleUtil.findFileLocal(cheminFichierDistantDestination + "/" + nomFichierDestination),
            socleUtil.findFileLocal(cheminFichierDistantOrigine + "/" + nomFichierSource)));
    assertTrue(fileDestination.exists());
}

正如您在上面的代碼中看到的,它將復制一個文件,檢查大小,如果沒問題,則返回 true。 如果 5 次為假(在示例中),則 function 在刪除大小錯誤的文件后調用自身。

  • verificationTailleCorrespondantes TailleCorrespondantes 是function 來比較大小。
  • 如果兩個文件大小相同, tailleOk為真。

如果此 function 復制文件並且永不失敗(在生產中發生),我應該如何測試它的遞歸性?

謝謝

在這種情況下,我會編寫以下場景:

  • 流程在第一次迭代時成功
  • 該過程在第 (n-1) 次迭代時失敗,在第 n 次迭代時成功,且 n < 重試次數
  • 該過程在第 n 次迭代時失敗,n == 重試次數

為了做到這一點,您需要模擬您的依賴項。 特別是檢查文件大小的那個。 前面場景的 mocking 將是

  • 文件大小檢查返回 true。 斷言檢查已運行一次且結果有效
  • 文件大小檢查返回 false (n-1) 次,第 n 次返回 true。 斷言檢查已運行 n 次且結果有效
  • 文件大小檢查返回 false。 斷言檢查已運行重試次數且結果無效

暫無
暫無

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

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