grcov a l'air de faire le job (coverage), mais pour l'instant je maitrise trop mal l'écosystème rust pour l'intégrer (la compilation globale de duniter-v2s échoue chez moi)
Certaines palettes ont des tests qui racontent une histoire (par exemple universal-dividend), peu nombreux mais très longs et qui testent beaucoup de comportements de manière intriquée.
J'y vois plusieurs inconvénients :
C'est dur de savoir exactement quels sont les comportements testés. #272 (closed) montre qu'on peut facilement oublier des cas.
Si on veut changer de comportement, il faut relire l'intégralité du test et faire des modifications ad-hoc, ce qui fait perdre son intérêt au test.
Je serais favorable à des tests plus courts mais plus nombreux, orientés chacun sur un comportement précis.
On laisse les tests fleuves aux tests d'intégration.
Pour les tests d'intégration, il serait même intéressant de coder des automates formels et de vérifier leur parité avec le comportement de Duniter avec du fuzzing (envoyer des extrinsics aléatoires et vérifier que l'automate accepte l'état). Comme stage de recherche ça pourrait être intéressant si on avait autant d'argent que Web3 :p
C'est sûrement parce qu'un test fleuve a un très bon rapport couverture/prix pour le développer. Mais c'est effectivement un gain plutôt court-termiste qui génère une dette en face (les inconvénients que tu évoques), si l'on peut c'est mieux de faire des tests isolés.
Par contre là aussi il y a un risque de dette vu que chaque test reconduit une même mécanique qu'il vaut mieux éviter de dupliquer, en apportant une factorisation.
Mais pour reformuler l'idée : on crée des fichiers qui contiennent l'attendu d'un paquet de données métier (par exemple la fiche d'un membre de la Ğ1), et on fait reproduire ce même fichier en consultant le Storage (via le Runtime ou même plus haut via l'API RPC) et on vérifie que les fichiers sont identiques.
J'appliquais déjà ce type de tests pour Duniter v1 afin de vérifier que le "Storage" (les index V1) généré pur un scénario donné était cohérent avec l'attendu.
L'avantage : l'écriture des fichiers d'attendus peuvent être réalisés par des non-développeurs, mais qui connaissent le métier (ex. : un membre importé de la V1 doit avoir comme statut "Membre" au bloc#0).