7
votes

Test de l'unité personnalisé uIView

J'ai une application graphique à l'aide de Crangraphics Cadre,

Bien que j'ai des costumes de test unitaire pour les fichiers de modèle, je ne peux pas sembler comprendre comment créer un test d'unité pour mon UIView personnalisé,

Mon objectif est de définir des propriétés de base de la vue et de voir le résultat des fonctions de tirage, bien que dans mes postes, j'ai appelé: [Self SetNeedsDisplay]; La fonction «Drawrect» n'est pas appelée à partir du test de l'unité, bien qu'elle soit appelée à partir de la demande réelle

Y a-t-il un moyen de dessiner dans un projet de test unitaire? Quelle est la meilleure pratique / outils pour tester des projets d'interface utilisateur?

merci


0 commentaires

3 Réponses :


3
votes

Un moyen simple de tester le dessin est d'abord rendre le dessin comme vous voulez (donc pas de TDD). Ensuite, faites un test qui rend le dessin dans un PNG. Utilisez un #idif conditionnel pour activer le code de test entre capturer une PNG de base et comparer contre ce PNG.

Le rendu peut changer légèrement dans de nouvelles versions OS. Alors collez-vous avec un seul système d'exploitation pour les tests d'image de base. Prenez une nouvelle base de référence lorsque vous devez.

Avec ce type de test en place, vous pouvez ensuite refacturer votre code de dessin. S'il rend la même image, vos derniers changements sont bons. S'il y a une différence, vous devez prendre une décision globale sur le point d'accepter ou non le changement. (Et si vous faites, capturez une nouvelle base de référence.)

EDIT: ces jours-ci, au lieu de faire tout ce que tout cela à la main, j'utiliserais iossnapshottestcase . Lorsqu'il y a un échec de test, au lieu de simplement donner un résultat «quelque chose qui a mal tourné», cela enregistre l'image. De cette façon, vous pouvez faire une comparaison côte à côte sans avoir à lancer votre application manuelle et à naviguer à la vue en question. Il simule également le rendu à différents appareils de différentes orientations, ce qui est vraiment génial pour la vérification de l'autolayouet.


5 commentaires

Grande solution Jon! Je fais moi-même tester le résultat de la vue personnalisée de mon œil. Depuis que je change beaucoup de points de vue et mon raisonnement ici est que je devrais voir si c'est faux. Néanmoins, je n'aurais pas pu avoir pensé à comparer de telles choses de toute façon. Peut-être que je le teste :) Et peut-être que cela pourrait être un sujet pour votre prochain screencast indice :)


@Jon Reid, pourriez-vous donner plus de détails ou un lien dans la manière de mettre en œuvre cette approche?


Je rendu à un PNG comme vous le faites, mais puis testez le CRC pour le PNG. De cette façon, il vous suffit de vérifier par l'œil une fois et si le test échoue, le CRC a changé et a besoin de vérifier.


@jon Reid Pourriez-vous donner plus de détails, im en utilisant le même cadre, mais j'ai un contrôleur d'affichage complexe contenant une allocation de contrôleur d'affichage enfant (avec défilement) mais lorsque je instantané, presque tous ne sont pas rendus correctement ou que leurs sousviews ne contiennent rien.Im c'est à uinttest (pas uitest)


@Redmak Parfois, des astuces peuvent être nécessaires pour que les choses se rendent dans un test d'instantané, donnant un coup de pied uikit. Par exemple, vous devrez peut-être créer un UIWindow, puis ajouter la vue du contrôleur d'affichage.



2
votes

En général Unité Les vues de test ne sont pas la bonne chose à faire. Le test unitaire est destiné à valider des atomes discrets de logique et si vous affactez votre code correctement, il devrait y avoir très peu de logique de votre point de vue.

Une approche plus réussie pourrait être d'utiliser le Cadre uautomation (ou votre outil d'automatisation de choix). Cela vous permet d'automatiser l'interaction simulée de l'utilisateur pendant que l'application est en cours d'exécution (soit dans le simulateur ou sur le périphérique). L'uautomation a des fonctions (les différentes méthodes d'affichage et captureRectwithName () ) qui vous permettent de trouver des vues spécifiques et de la capture d'écran. Vous pouvez ensuite l'accrocher, par exemple, Ligne de commande de ImageMagick's Comparez l'outil pour valider que Vous dessinez la bonne chose.


1 commentaires

On peut également écrire certains tests d'acceptation dans un cadre de test unitaire comme Ocunit. L'avantage de le faire est que vous pouvez vérifier le dessin des composants discrets comme une vue particulière. Bien sûr, vous pouvez également saisir des captures d'écran entières, mais elles sont plus susceptibles de changer.



0
votes

Je pense personnellement que vous devriez tester tout rendu que vous faites avec votre vue en utilisant des tests XCUI. Toutefois toute logique commerciale qui crée ledit rendu personnalisé, ou toute mathématique ou logique que vous avez ajoutée doit être testée et effectuée isolée de toute autre classe.

Par conséquent, vos tests d'uautomation vérifieront si votre point de vue est rendu, mais vos tests de l'unité valideront toute logique mathématiques ou commerciales qui pourraient exister.


0 commentaires