Utilisation des variables `` finales '' dans les tests Java Selenium
Cela pourrait être considéré comme une question de programmation, mais il s'agit de code de test, écrit en Selenium plus Java, donc je pense que c'est le site pertinent pour publier ceci.
Lors de la visualisation des tests d'autres personnes en ligne, je trouve parfois des éléments Web ajoutés à une variable déclarée comme final:
final WebElement element = driver.findElement(By.id("element-id"));
Je suppose que cela permet une meilleure atomisation et une meilleure isolation des tests et cela a du sens.
Comme je n'ai pas eu de problèmes pour ne pas déclarer les variables définitives, y a-t-il d'autres raisons de le faire?
Réponses
Il s'agit d'une pratique de programmation standard destinée à réduire les bogues dans le code. Pour rappel, le modificateur final empêche une variable primitive ou une variable de référence d'objet d'être réaffectée. Ainsi, les primitives sont immuables et une référence peut jamais pointer vers l'objet qu'elle désignait initialement. (Cela n'affecte pas les méthodes que vous pouvez appeler, même celles qui muteraient l'état interne de l'objet.)
Chaque IDE que j'ai utilisé au cours des 10 dernières années a eu la possibilité d'inspecter le code dans une méthode et d'appliquer de manière déterministe le modificateur final à une variable locale qui n'est pas réaffectée après son initialisation. L'idée derrière cela est que si vous avez écrit du code et que vous l'avez enregistré (ce qui exécute des actions de sauvegarde qui appliquent le modificateur final), vous ne voulez probablement pas modifier à nouveau cette variable. Si vous avez l'intention de modifier cette variable, vous pouvez simplement supprimer le modificateur. Dans cette logique, chaque variable est définitive jusqu'à ce que quelqu'un décide activement qu'elle ne devrait pas l'être.
Comme pour tout ce qui concerne la programmation, il y a des contre-arguments à cela. La première est qu'elle encombre le code, augmentant la charge de travail d'un programmeur essayant de lire le code pour le maintenir. Bien que cela n'ait pas été mon expérience personnelle avec ce modificateur, je sais que cela a été avec d'autres pratiques pour moi, donc je ne veux pas ignorer cela simplement parce que cela ne s'applique pas à moi. L'autre est que si vous ne l'utilisez que sur celles dont vous décidez qu'elles devraient être définitives (au lieu de masquer le code avec final), vous envoyez un message à d'autres développeurs que cette variable ne devrait jamais changer - qu'elle devrait se démarquer parmi d'autres variables que vous ne devriez pas essayer de changer.
Le commentaire de PDHide sur la limitation de l'utilisation de l'exécution parallèle est lié - les variables finales sont éligibles pour être utilisées dans les lambdas et le traitement parallèle alors que d'autres variables ne le sont pas. Maintenant, je crois (cela fait un moment) que le compilateur Java vous permettra d'utiliser une variable qui est effectivement finale même si elle n'est pas explicitement finale mais si quelqu'un décide de modifier la variable avant l'exécution parallèle, le compilateur ne peut plus dire qu'il est effectivement final et n'est donc plus éligible pour le traitement parallèle et générera une erreur de compilation. Facilement réparé, mais peut néanmoins être ennuyeux.
À la fin de la journée, vous voudrez avoir une brève conversation avec votre équipe pour décider de ce qui fonctionnera le mieux pour vous. Le mot-clé n'a aucun impact sur l'exécution ou l'efficacité réelle, et c'est une question de productivité du programmeur.