-
Notifications
You must be signed in to change notification settings - Fork 318
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: run phpunits #2993
base: alpha
Are you sure you want to change the base?
feat: run phpunits #2993
Conversation
b266c02
to
cbcf7d3
Compare
Salut @pifou25, Cordialement, |
2 types de tests: unitaire: tester une classe seule sans dépendance = github workflow phpunit.yml intégration: tester jeedom en fonctionnement, utilise docker pour démarrer la bdd et le container jeedom = github workflow docker-test.yml
cbcf7d3
to
2621a6a
Compare
Merci pour cette initiative sur les tests. Je pense pouvoir apporter quelques éléments de réponse basés sur mon expérience précédente sur ce sujet : Concernant les tests d'intégration existants : je confirme qu'il est préférable de les corriger plutôt que repartir de zéro. J'ai déjà fait ce travail dans une PR précédente #2902 et ils sont maintenant fonctionnels. Pour le couplage fort avec les classes comme DB et utils :
Cette approche d'encapsulation permet de :
Je propose de collaborer pour partager la configuration de la base de test, échanger sur les patterns d'encapsulation qui fonctionnent bien et éviter les duplications d'effort. N'hésitez pas si vous souhaitez qu'on en discute plus en détail ! |
64320aa
to
2621a6a
Compare
|
||
"; | ||
|
||
$filename = str_replace("..", substr(__DIR__, 0, strrpos(__DIR__, "/")), "../core/config/common.config.php"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pourquoi ne pas faire directement $filename = __DIR__.'/core/config/common.config.php');
?
Mais je trouve quand même risqué de pouvoir lancer le tests d'intégration avec la configuration courante de la bdd.
J'avais proposé le .env
, mais on peut aussi
- réécrire ce fichier avec une config adaptée en gardant l'original en copie (pas fan, je trouve ca bancal, mais c'est une solution)
- intégrer un nouveau fichier
common.config.test.php
par exemple mais ca necessite le meme type de changement qu'avec le .env, chose que tu sembles vouloir éviter. - surement d'autres solutions mais il faut analyser les impacts.
(Désolé pour le pavé)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oui ne me souviens plus pourquoi j'ai pondu un truc aussi compliqué, mais aucune raison de faire ça 👍
Il n'y a aucun risque à lancer les tests sur la config courante, on sera toujours dans un contexte spécifique (workflow, ou bien configuration de dev locale) je ne vois vraiment pas le besoin de rajouter on fichier spécifique common.config.test.php
On ne pourra en aucun cas lancer les TU sur un jeedom de prod puisque la dépendance phpunit ne sera pas installée, c'est une "dev-dependance" dans composer.json.
// add jeedom custom autoloader | ||
require_once __DIR__ . '/../core/php/utils.inc.php'; | ||
|
||
function jeedomAutoload($_classname) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je ne comprend pas pourquoi tu veux mocké l'autoloader ici. Quelle était le problème que tu as rencontré qui t'as amener a faire ca ?
En fait, je voudrais expliquer plus clairement mon point de vue sur les
risques.
Prenons un exemple concret de développeur : tu travailles sur Jeedom en
local, tu navigues dans l'interface pour tester tes modifications, tout en
voulant lancer des tests unitaires pour vérifier ton code. Le problème
c'est que les tests actuels peuvent interférer avec ton travail - par
exemple, ils vont automatiquement installer le plugin "virtual" s'il n'est
pas là. Du coup, ton environnement de dev se retrouve modifié sans que tu
l'aies voulu.
Il y a aussi un autre souci : pendant que tu développes, tu fais plein de
manipulations dans la base de données via l'interface. Mais pour que des
tests d'intégration soient fiables, ils doivent partir d'un état connu et
contrôlé - soit une base vierge, soit des données de test bien définies.
Là, on se retrouve coincé : soit les tests écrasent tes modifications en
cours, soit ils tournent sur une base dans un état qu'on ne maîtrise pas.
C'est pour ça que je propose d'ajouter un fichier de config spécifique pour
les tests - ça nous permettrait d'avoir un environnement dédié et contrôlé,
sans risquer d'impact sur le travail de développement en cours.
Effectivement, comme tu le dis, ce n'est pas un problème en prod ou en CI
puisque ces environnements sont dédiés. C'est vraiment pour faciliter la
vie des développeurs au quotidien.
|
Description
J'ai passé un peu de temps à essayer de faire marcher les TU existants, mais je n'avance plus, alors je propose déjà le projet actuel, avec quelques questions... :)
Explications : 2 types de tests:
les questions
A priori, les tests existants sont à classer dans la 1ere catégorie, mais, ils sont tous en erreur... on est d'accord qu'ils n'ont pas été maintenu depuis longtemps, est-ce que ça vaut le coup de les corriger ou bien on supprime tout pour repartir sur une base propre?
Pour la 2e catégorie, en principe la plus simple, on ne devrait inclure qu'une seule classe, celle à tester. Le problème c'est que toutes les classes ont le
require_once __DIR__ . "/../php/core.inc.php";
et donc on se prend toutes les dépendances. C'était peut-être utile avant, mais avec l'autoloader maintenant on n'a plus besoin de répéter cet include dans toutes les classes ( ... vrai ?) Je l'ai donc enlevé. Mais ça reste compliqué de faire des TU simples car il y a un couplage fort avec certaines classes (DB, utils, en particulier) donc il faudra soit faire un mock de ces classes indispensables (j'ai commencé à le faire dans bootstrap.php), soit refactorer pour diminuer ce couplage.(ps: j'ai aussi des changes d'une autre PR sur celle ci, mais sera mise à jour au fil de l'eau. C'est un brouillon)
Suggested changelog entry
exécution automatique des tests unitaires