java - 递归函数的 JUnit 测试(创建文件并比较大小)
问题描述
我正在做一个项目:复制一个文件并检查大小是否相等。如果没有,删除文件并重做(定义重试次数)
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());
}
正如您在上面的代码中看到的,它将复制一个文件,检查大小,如果没问题,则返回 true。如果 5 次为假(在示例中),则该函数在删除大小错误的文件后调用自身。
verificationTailleCorrespondantes
是比较大小的功能。tailleOk
如果两个文件大小相同,则为真。
如果它复制文件并且永远不会失败(在生产中发生),我应该如何测试这个函数的递归性?
谢谢
解决方案
在这种情况下,我会编写以下场景:
- 流程在第一次迭代时成功
- 该过程在第 (n-1) 次迭代时失败,在第 n 次迭代时成功,且 n < 重试次数
- 该过程在第 n 次迭代时失败,n == 重试次数
为了做到这一点,您需要模拟您的依赖项。特别是检查文件大小的那个。对前面场景的嘲笑是
- 文件大小检查返回 true。断言检查已运行一次且结果有效
- 文件大小检查返回 false (n-1) 次,第 n 次返回 true。断言检查已运行 n 次且结果有效
- 文件大小检查返回 false。断言检查已运行重试次数且结果无效
推荐阅读
- selenium-webdriver - 使用 alt 定位器查找 img 并单击
- mysql - How to modify a backup file so that the contents can be restored
- scala - 从 scala 脚本内部执行 hdfs 命令
- c# - 当他们的前 8 位数字匹配时如何获取行比较
- html - 为什么我不能从标题中删除最大宽度为 1024px 的 backround-attachment: fixed 属性
- reactjs - 如何使用 Lodash _.find() 和 setState() 更改状态中的值?
- nativescript - 垂直移动项目列表
- javascript - javascript 正则表达式 - 组
- php - 如何将部分无效的 JSON 转换为有效的 JSON?
- kubernetes - 为什么我在登录领域管理控制台时得到 Invalid parameter: redirect_uri?