递归函数的 JUnit 测试(创建文件并比较大小)
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;
}
下面是非递归函数的单元测试:
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());
}
如您在上面的代码中所见,它将复制一个文件,检查大小,如果没问题,则 return 为真。
如果它为 false 5 次(在示例中),则该函数会在删除大小错误的文件后调用自身。
verificationTailleCorrespondantes
是比较大小的函数。
如果两个文件大小相同,则 tailleOk
为真。
如果此函数复制文件并且永不失败(在生产中发生),我应该如何测试它的递归性?
谢谢
在这种情况下,我将编写以下场景:
- 流程在第一次迭代时成功
- 进程在第 (n-1) 次迭代时失败,在第 n 次迭代时成功且 n < 重试次数
- 进程在第 n 次迭代时失败,n == 重试次数
为此,您需要模拟您的依赖项。特别是检查文件大小的那个。前面场景的模拟是
- 文件大小检查 returns 正确。断言检查运行一次,结果有效
- 文件大小检查 returns 次错误 (n-1) 次,第 n 次正确。断言校验运行n次,结果有效
- 文件大小检查 returns 错误。断言检查是运行次重试次数结果无效
我正在做一个项目:复制一个文件并检查大小是否相等。如果不是,删除文件并重做(定义重试次数)
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;
}
下面是非递归函数的单元测试:
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());
}
如您在上面的代码中所见,它将复制一个文件,检查大小,如果没问题,则 return 为真。 如果它为 false 5 次(在示例中),则该函数会在删除大小错误的文件后调用自身。
verificationTailleCorrespondantes
是比较大小的函数。
如果两个文件大小相同,则 tailleOk
为真。
如果此函数复制文件并且永不失败(在生产中发生),我应该如何测试它的递归性?
谢谢
在这种情况下,我将编写以下场景:
- 流程在第一次迭代时成功
- 进程在第 (n-1) 次迭代时失败,在第 n 次迭代时成功且 n < 重试次数
- 进程在第 n 次迭代时失败,n == 重试次数
为此,您需要模拟您的依赖项。特别是检查文件大小的那个。前面场景的模拟是
- 文件大小检查 returns 正确。断言检查运行一次,结果有效
- 文件大小检查 returns 次错误 (n-1) 次,第 n 次正确。断言校验运行n次,结果有效
- 文件大小检查 returns 错误。断言检查是运行次重试次数结果无效