
Snapshot Testing with Simon Cropp
Durée: 74m57s
Date de sortie: 26/11/2021
In this episode, I was joined by Simon Cropp to chat about a form of testing called Snapshot testing! Simon is the author of Verify, which is a library that I’m quickly discovering is going to save me a HUGE amount of time when writing tests in dotnet! We chatted about snapshot testing in general; the various helper extensions that Verify has, which adds support for lots of different technologies; and also about testing in general. If you’ve ever felt that you spend too much time writing asse...
Salut tout le monde, bienvenue à l'Unhandled Exception Podcast, je suis Dan Clark et c'est
épisode 29.
Et dans cet épisode, nous allons parler de quelque chose qui s'appelle le test de snapshot.
Nous avons eu quelques épisodes sur le test, nous avons parlé de TDD, nous avons parlé de
Steven Pulse, qui était un concept très intéressant, et de plusieurs autres épisodes,
le sujet de l'expérience est arrivé dans un autre format, par exemple, plus recentement
avec Kendra Havens, nous avons parlé du studio visuel, et elle a parlé de la testée de
Pets et de Teletest.
Mais aujourd'hui, nous allons parler d'un autre type de test, qui n'est pas vraiment
utilisé avant, mais j'ai joué beaucoup plus de temps avec ça, et je vais dire que
ça me fait très très heureux, et je peux voir que ça m'a fait un grand
peu de temps.
Donc maintenant c'est probablement un bon temps pour nous introduire notre guest, qui est
l'autor de la testée de snapshot qui s'appelle Verify, pour nous dire tout
ce qui est passé, Mr.
Sammincrop.
Bienvenue à la show, Samminc.
Hey, c'est beau d'être ici et merci beaucoup d'avoir me.
C'est beau de vous avoir, et vous êtes venu de Sonny Australia, qui est, oui, probablement
beaucoup plus bon que nous avons à l'époque.
C'est un moment où on est venu de Sonny, et vous pouvez ressentir la chaleure.
Oui, c'est un bon temps d'année ici, où c'est pas trop chaud à la nuit, et
le temps de la nuit est très beau, et c'est juste un bon temps de l'année, et le spring.
Ah, très bien.
Oui, c'est un moment différent de la journée, donc je parle à 10h du matin, et je pense que
c'est 9h00, 9h00, là-bas.
Oui, 9h00, à la nuit de la nuit.
La nuit de la nuit, c'est un bon moment pour vous, non ?
Ah, c'est drôle de faire ce genre de choses, et on n'a pas de plans, donc oui,
c'est bon de faire.
C'est génial, génial.
Donc, avant de nous dévier dans le test de Snapchat,
pouvez-vous nous donner un instant d'intérêt à votre background et à ce que vous faites ?
Je suis un dev, pour, je pense,
juste pendant 20 ans.
Ces jours, on travaille en large partage de la compagnie,
donc, oui, on travaille pour l'entreprise,
et en travaillant en première ligne sur dotnet,
en fait, on fait un app fullsack style,
donc à la fois, on fait des frontières anglaires,
et des appels graphique,
et surtout, mon travail s'occupe en travaillant sur les services de la back-end
pour déliver la fonctionnalité de la business.
Donc, on vérifie vraiment mon projet de l'analyse.
Nous utilisons ça en travail, mais c'est certainement dans le background, je pense.
Je suis tellement impressionné avec tous les différents add-ons et choses.
Je pense qu'on parle d'un tweet hier,
et il a dit, oh, je vous reconnais,
ça pourrait faire avec un add-on aussi.
C'est impressionnant de combien de temps vous pouvez dédicier
pour ceci au-dessus d'un travail full.
Oui, en parlant de Scott Hanson,
il parle de quoi leaje l'âge Lego est de diverses choses.
Je like des aliments très pluggables.
Vous avez opté pour tous les différents features que vous voulez.
Je les ai designés en software et en frameworks et en libraries
avec ceci en main,
pour que je puisse choisir tous les différents little add ins
que je veux juste de rencontrer ma scénarie.
Avec ceci en main, j'ai aussi regardé
et j'ai fait un approche avec de nombreux petites répositories
et qui délivre des petits bits de Lego dans un moyen qui est managable et scalable
et qui ne nécessite pas trop de temps pour moi.
Donc j'ai des pratiques et des patins à faire et je m'enlève tout ça.
Donc ça me fait souvent 4 ou 5 heures de finir une nouvelle repos et de nouveau package.
Je fais ça généralement à l'avantage de la semaine.
Je dois être à peu près de 180 packages sous mon nom à l'heure.
Je dois faire plus de choses à l'air.
Mais c'est en fait ça parce que je fais ça dans les groupes de utilisateurs et la famille et le travail en plein temps.
Je pense que je dois dire des choses à l'air mais c'est bien de faire plus de choses à l'air.
Donc avant de parler de ce que l'on fait en test, je vais faire ce épisode de l'élection de l'écran.
Et celui-ci va au Alphalephtow, qui a très kindly bâti moi un café.
C'est 3 coffres.
Je m'ai récemment appris le budget de la coffe de la coffe à l'écran.
Et Alph a très kindly bâti moi ces 3 coffres et m'a dit que je suis content pour le bon podcast et le bon travail avec les groupes de utilisateurs.
Je dis que si tu es venu au Oslo, et pour être honnête, ça m'a vraiment fait mon jour,
pas le monnaie, mais le pensement derrière ça, la appréciation, ça m'a vraiment fait beaucoup.
Donc un grand merci à Alph.
Et je veux aussi dire un grand merci à la communauté de développeurs de la communauté de Twitter.
L'année dernière, j'ai tweeté sur le podcast,
en disant si les gens peuvent m'aider à m'expliquer le nom.
Et je m'ai été gêné par comment j'ai retweeté ce gars.
Donc je veux juste dire un grand merci à tous ceux qui ont retweeté.
C'était vraiment un peu mind-blowing, à l'heure de toute façon.
Ok, donc le test de snapshot.
Pour les personnes qui ne l'ont pas regardé,
pouvez-vous nous donner un petit overview de comment ça fonctionne?
C'est arrivé à moi plus tard, quand vous étiez en train de lister les gens que vous avez parlé de test,
le test de snapshot est probablement mis en nom.
Il serait plus actuellement appelé snapshot assertion.
Il s'occupe surtout du côté assertion de la date.
Mais ça change comment vous travaillez.
Et des parts sont plus grandes que les petits concepts.
Donc le test de snapshot est l'idée de prendre un peu de date et se serialiser.
Cette date se serialise, elle se place dans un fil.
Et ce fil se fait commettre.
Et la prochaine fois que vous vous rendez sur le test,
vous serialisez de nouvelles données et vous comparez cela à ce que l'on existe sur le test.
Donc en pratique, c'est la même chose que si vous avez un modèle complexe,
c'est le résultat de vous en appuyer un code sur le test.
Vous utilisez ce modèle, vous serialisez-le à Jason,
c'est l'approche que j'ai appris.
Jason se fait rétablir le test.
Et la prochaine fois que vous vous rendez sur le test,
vous vous rendez un nouveau file de Jason et ce file se fait comparé à ce que vous avez fait sur le test.
C'est le concept de snapshot test,
ce qui est ce que toutes les libraries utilisent.
Les autres ne sont pas sur le part de Jason et ils attendent juste le texte,
et vous vous rendez tous les autres bits.
Mais c'est le concept de la course.
Il y a un couple d'études extra-levels qui aussi se sont appuyé avec certaines libraries,
c'est-à-dire qu'ils prennent le comparé de ces deux files
et la délivré de fonctionnalité pour que ce soit facile de comparer ces choses.
C'est ce que vous avez appris à la site de Diff Tool.
Diff Tool est un super set de snapshot test,
pas que les libraries puissent faire ça.
C'est cool. Quand vous dites que vous faites le résultat sur le disque,
presumably, ce résultat va ensuite dans votre contrôle de source,
pour que ça soit le pass de test accepté,
si c'est la même façon de le faire.
Oui, les libres différents sont appelés différentes choses,
comme le master snapshot ou le golden snapshot,
ou le prouvé, ou vérifié.
Il y a des noms différents sur comment ces choses sont nommées sur le disque,
mais elles sont les mêmes.
C'est juste une représentation de résultat sur le test.
Si je pense à l'amant de temps que j'ai étendu,
de créer des données d'expectation pour comparer mes assortes,
ça va me sauver un ton de temps en passant.
Et aussi, comme vous l'avez mentionné sur le Diff Tool,
un problème que je n'ai jamais pu avoir dans le passé,
c'est que je n'ai pas écrit ce que j'ai dit en expérience.
J'ai fait mes assortes et à un moment, le test s'y défend.
En fait, visualiser ce qui a changé dans le JSON,
qui est présent dans ma windows de test d'outre,
qui n'est pas bien formatisé ou tout ça,
ça peut être une peine en itself.
Mais quand vous avez joué cette semaine avec votre library de vérifier,
et que c'est l'opinion de ma chose de Diff Tool,
qui s'est passé à être un mode de vignette,
je peux voir le JSON avant et après.
C'est tellement facile de voir ce qui a changé.
Et puis je peux juste copier le bloc qui a changé
de gauche à droite dans le Diff Tool,
et sauver ça.
Et ça a accepté la nouvelle source de vérité.
Et c'est ça.
Ça juste fonctionne.
C'est un changement intéressant de la façon dont les assortes se passent.
Parce que, souvent, ce loop serait quelque chose qui a failli.
Mais quand vous avez un code de vérification,
le code de vérification vous dit que le code est faible.
Mais vous n'avez pas de concept de la data par farif
autour de ça,
ce qui est le contexte.
Et vous vous avez très souvent tendu à dire
que vous allez devoir débarquer dans ce point de travail
ce que l'accent était.
Donc, quand vous avez pris l'approche de la test de snapshot,
parce que c'est tellement facile de réexcepter les changements
et de manier l'impact de changer de data,
vous vous enlèvrez souvent sur le data de capturation.
Et c'est généralement un approach d'assertion.
Ce serait un problème.
Mais avec le test de snapshot,
ce n'est pas parce que c'est tellement facile de réexcepter
la changement de résultats.
Alors que, quand vous avez un faillite,
vous vous enlèvrez cette extra data
autour de cette information
qui informe pourquoi le test a fallu.
C'est comme si vous en faisiez un Diff.
Et si vous regardez un Diff,
on dirait un GitHub ou un Diff Tool,
vous savez,
juste de voir les files qui ont changé,
c'est l'équivalent de votre asserté.
Mais en fait,
le Diff Tool a des 4 lines de la base
et les 4 lines de la base.
Et ça informe
que vous avez pu comprendre ce qui a changé.
Donc, c'est un approach similaire.
Ça veut dire qu'il n'y a pas de manière
d'avoir un style TDD
de test avec ça,
parce que vous avez toujours dû
faire votre code de production
pour générer le snapshot.
Pas vraiment.
Vous pouvez faire exactement la même chose
que vous avez fait avec le test et le développement.
Vous pouvez créer
votre expérience de ce que vous voulez.
Un exemple de l'exemple que j'ai vu
était
vérifier les supports,
pas seulement
sur les modèles objectifs.
Vous pouvez surerir
tout ce que vous pouvez faire
sur le Diff et encore raison d'en faire.
Donc, en ce cas,
c'était surerir
une formule WPF
sur le Diff
dans la forme de la PNG.
Ok, donc la première PNG que vous avez,
vous vous en faites avec un crayon.
Vous avez le design
qui vous donne ce que vous devez faire.
Et vous vous en faites sur le disque.
Ça peut être quelque chose.
Ça peut être un diagramme
d'un tool de moc-up.
Qu'il vous donne quelque chose
sur le disque
que vous pouvez faire faire le disque.
Ça n'a pas de faim,
ça n'a pas de faim
de couleur, etc.
Mais c'est quelque chose
sur le disque que vous pouvez faire.
Donc, en ce cas,
ce serait que
votre design vous donne
une image de ce que vous pensez
que le style de la PNG
devrait se faire.
Et vous vous en faites sur le disque.
Vous commencez à coudre.
Et
comme vous l'avez fait,
vous vous en faites un test.
Je vois les boutons de la main,
mais on n'est pas assez heureux
de ça. Et enfin,
chaque fois que vous en faites un test,
le comparaison
gradually commence
à se faire plus et plus
comme l'outil.
Qu'est-ce que vous espérez être.
Et à un point où vous êtes heureux,
il ressemble assez bien.
Vous ne vous en faites pas rarement pixelant.
À ce point, vous pouvez dire
« Show it to the designer »
et dire « Is this ok ? »
et ils peuvent dire « Yes, you've
accepted it. »
C'est votre approach test-driven
pour un style de formule.
Ça peut même travailler
mieux quand vous avez
quelque chose qui a un
représentation texte.
Donc, si vous faites
un nouveau contrôle,
vous pouvez avoir votre expert
de HTML, ses experts de CS
pour dire « Comment ça devrait
faire le look
de la CS? »
Ils peuvent vous donner
tout ce que vous avez
de la CS.
Et vous faites des queries
de la date et
d'autres pour
générer la CS.
Donc, ils vous donnent
les files de la façon
que vous devez voir.
Vous vous placerez sur un
disc pour vérifier les files
et vous vous commencez à coder.
Et c'est exactement
la même façon que
le work de test-driven,
mais c'est sur les steroids
parce que vous pouvez
vous asserter
contre tout.
Quoi-que soit serialisé
sur le disc.
Ça ressemble à un peu d'inclinaire.
J'ai fait un plan
pour cette semaine.
J'ai utilisé
le normal,
comme un json.
J'ai un set d'objets
et votre tour
convertit à un json.
C'est ce qui vous montre
dans mon diff.
Mais,
oui,
ce que vous décidez
maintenant,
c'est que ça vous ouvre
beaucoup de différents
outils pour cela.
Oui,
nous avons été
sur des approaches similaires
où vous avez...
Vous pouvez avoir
votre expert SQL
et ils disent
qu'il y a quelque chose
d'inquiétude que vous
vous mettez dans l'envers
du framework.
Ça fait trop de loads.
Ils ne sont pas
nécessaires
sur un framework
et franchement,
je ne sais pas
le SQL très bien.
Mais,
avec Verify,
vous pouvez prendre
une instance
d'un query en framework
en envers.
Donc,
il ne faut pas
d'un database à parler.
Vous pouvez dire
que le SQL,
ce que ça génére
sur un disque.
Vous avez
ce copier sur un disque
et vous avez votre expert
qui dit
qu'il est ce qu'on
génére sur ce query.
Qu'est-ce que vous pensez?
Ils peuvent
ensuite
faire un tweet
en disant
qu'on veut que
on soit plus comme ça
et avoir ces caractéristiques.
Vous faites ces
changements à la file.
Vous pouvez
aller en envers
en envers
et vous pouvez
transmettre
vos statements de links
pour changer
les choses
sur le disque.
Donc,
encore,
le développement test
et ce qui est
le target
de ce que vous avez
défini
et qui vous a été
défini
par votre expert SQL.
Donc,
est-ce que
le logger
en envers
en envers
en SQL
et vous avez
de transmettre
un query
en envers
en envers
un statement de SQL
est un public API.
Donc,
en envers
il y a un point d'extension
qui dit
pour cet instance
de cet exemple,
je ne veux pas
se surmonter
quand il est passé.
Donc,
si vous vous passiez
dans un instance
de query,
vous avez juste
un statement de links.
Vous n'avez pas besoin
d'un database
ou d'autre.
C'est tout en mémoire.
Vous vous passiez
sur le verifier.
Ça sera surmonter
le disque
pour le look en SQL.
Wow!
Quand je dis
que ça va me
donner si beaucoup de temps,
je me change mon mind
parce que maintenant je pense
sur tous mes projets
qu'il va me faire
de la suite.
Il y a un
intéressant
de l'effectif de site
qu'il y a
où
une assertion
n'est pas une bonne way
de communiquer avec les gens
où vous regardez
une assertion
et vous avez besoin
de raison.
C'est comme
avoir un texte
comment faire
une application
vers un regex.
Une
vous pouvez raisonner
et une vous ne pouvez pas
sans
avoir du temps
de comprendre.
Avec
le test
de Snapchat,
comme l'effectif de site,
vous avez des screens
check-in,
des queries
SQL check-in.
Ça aussi
soutient
un
schema
de service SQL
database.
Comme vous
changez votre
framework
ou d'autres
outils que vous utilisez
pour générer votre database,
vous ré-write
ce schema
sur le disque
ou des formes
sur le disque.
Maintenant
vous avez une évolution
de comment
l'app a changé
au temps.
Vous pouvez faire des
disques entre les deux versions
de comment
l'exact SQL a
regardé entre deux différents
déploiements.
Nous avons
eu un déploiement
de performance
entre ces deux déploiements.
On va faire
un disque
entre les deux
scémas de SQL
et voir
ce que vous avez changé.
Ça
signifie que
quand vous êtes
essayant de
avoir des approvals
pour avoir un déploiement,
il faut
avoir des approvals
de la team SQL.
Vous pouvez les
décider de
disque
après vous
déploiement.
Ça
signifie que vous avez un
mécanisme de
communiquer avec
des députés
ou des designers
au temps.
Vous pouvez les
faire
voir
et voir
les
changements
dans les
versions
des
Vous
n'avez pas
de logins
dans le système
et vous
contrôlez le
data
pour le scénario.
Vous avez les
permissions
et tout ça.
Vous avez
tout ça
sur le disque.
Je
pense que
c'est un
déploiement
normal
qui peut
être
très
code-based.
Le
développeur
va
faire
son
code.
C'est
ce que
les
développeurs
sont
des designers.
Et
les députés.
Il y a
un
déploiement
Si
vous
croyez
dans
le test
dans le
test,
vous
pouvez
voir
le test
collocé
avec
l'outil
d'actualité.
C'est
un
déploiement
normal.
Vous
avez
des
qui
vous
des
tests.
Il y a
des
des
des
des
des
des
des
des
des
des
des
des
des
des
des
des
des
emberts.
Je
où vous avez un certes très simple,
plutôt que d'étonner des données plus compliquées.
Je pense que ça nous intéresse à la prochaine question.
Ce sont des scenarios où vous n'aurez pas besoin de utiliser
le test de snapshot et de utiliser les certes normes.
Il y a quelques choses,
des choses range-based.
Nous voulons que la performance de ce truc soit sous 10 secondes.
Parce que le point de vue est
que ce que vous êtes assortir est un numéro qui change.
Vous ne pouvez pas tester le test de snapshot.
Parce que ça change à chaque fois que c'est rentré à la disc.
Donc, le point qu'il faut vous rappeler est
que le test de snapshot n'est pas un replacement pour les certes traditionnelles.
Ils travaillent de côté à côté.
Vous pouvez avoir des tests de surchauffement et des tests de snapshot
dans le même test.
Ce n'est pas un replacement.
Il y a des autres des données
qui sont des combinations de date
où vous voulez assortir
les nuances de la date et de la façon dont ça fonctionne.
Donc, dans ces cas,
vous avez des certes que vous avez des cas de surchauffement
et vous avez aussi des tests de snapshot
et des données.
Juste pour que vous avez le temps de faire ça.
Je peux utiliser des validations fluentes.
Je peux utiliser des temps de date.
Le méthode d'extension est entre nous.
Ce n'est pas un cas où vous pouvez faire quelque chose de similaire.
Ou un cas de plus près.
Il y a des méthodes d'extension
qui sont utiles,
qui ne sont pas suffisées pour les tests de snapshot.
Utilisez des validations fluentes
pour vérifier les tests de votre site.
Sorry, fluentes assertions.
Il y a trop de lives qui ont commencé avec fluentes.
Comment ça fonctionne?
Si vous avez des JSON
ou quelque chose que vous voulez un snapshot
et que vous avez des temps de temps
ou des guides,
ou quelque chose d'autre,
qui vont différer à chaque fois?
Il y a un concept qui s'appelle Scrubbers.
Un Scrubber est un truc
qui s'applique dans la pipeline
et qui va vérifier.
Après vous passons dans le data,
il y a deux niveaux.
Un s'est passé durant la serialisation.
Vous pouvez scrub des choses
basées sur les APIs.
Une manière forte.
Après la serialisation du texte,
vous pouvez aussi avoir des scrubbers textes
qui font des replacements
ou des replacements de lignes.
Il y a des scrubbers défauts
qui sont déjà plugués.
Si vous passons
dans un modèle qui a 3 guides,
il va automatiquement détecter
les deux.
Le deuxième, le deuxième, le deuxième, le troisième, le troisième.
Si un guide s'applique
deux fois,
vous avez le guide 1, le guide 2
et le guide 1.
Le même chose qui s'applique avec des temps de temps,
des temps de temps,
il y a des choses d'autre.
Les choses qui sont considérées
d'une fois,
qui sont en cause de tests de break,
elles sont automatiquement scrubber.
Vous pouvez le terminer,
mais souvent,
c'est satisfactrice.
On a
l'information de la query
qui a un guide.
On a des résultats qui ont
4 ou 5 locations
pour que les idées se corollent.
Vous pouvez voir
que le guide
a été tokenisé
pour quelque chose d'humain.
Je jouais
cette semaine dans mon blog de Jason.
J'ai vu un underscore d'un date
et je me souviens
de penser que c'est un bug de ma code,
de faire deux strings sur un objet.
Mais je me réveillais
rapidement,
parce que je pensais que c'était intéressant.
Je me suis rendu compte que c'était
vraiment intéressant.
C'est vraiment intéressant,
parce que, pour le faire,
c'est un peu pire.
C'est foudre,
mais il y a aussi des regex smarts
où,
si vous avez une réparation de HTML,
vous pouvez
avoir
une approche optique,
parce que c'est plus de temps,
mais il y a un regex
sur le texte que vous avez,
et un réplacement de la base
de la base de la base de la base
et d'autres dates en ligne.
Ça veut dire que vous avez des links
dans votre salle de HTML,
ces links
ne doivent pas être fragiles.
Ils sont réplacés dans le texte,
en même manière que Jason
s'est rendu compte de la version.
Bien,
dans la code que je fais cette semaine,
j'ai ajouté un scrubber
pour remplir
un de mes fields,
qui était automatiquement
incrementé par le database.
C'était un column de la base de la base de la base de la base.
Je n'ai pas voulu
comparer ça.
J'ai utilisé le scrubber,
avec un réplacement,
et il y a eu un lambda.
Dans le lambda, j'ai
réglé le regex.march.
Je faisais des expressions régulaires,
c'était un méthode que je pouvais
faire avec le regex,
mais je n'ai pas le droit de le faire.
C'est un cas de l'edge,
j'ai l'air sûr que il y a
deux scrubbers, un qui fait un regex
et un qui passe dans un string.
Et un autre qui fait un regex
de l'émission.
Ça va probablement vous aider.
Les scrubbers de la base de la base
travaillent aussi en ligne par ligne.
Parce que c'est généralement
ce que vous avez besoin de replacer.
Réalement, vous avez besoin de remplacer
le database de la base de la base.
Vous avez besoin de replacer
le code de l'émission.
C'est un peu de
l'effet de l'émission,
mais vous pouvez faire un bon
API de fluency,
parce que c'est une chose de
oubli.
C'est seulement le dernier point
de l'effet de l'émission
que ça retourne en fait et fait oublié.
C'est vraiment cool.
Je vais juste ouvrir un ride.
Je vais essayer ça.
Pour le bénéfice de l'émission,
dans mon set, le syntaxe est
un
point de vérification.
Je vais passer à un point de vérification.
C'est ça.
Après ça, je peux faire
un point de vérification.
Et puis, des méthodes d'extension.
Je pense que c'est des méthodes d'extension.
Comme vous l'avez mentionné,
j'ai des lines de scrub à replacer.
Vous pouvez faire ça.
Mais vous pouvez changer ces deux.
Ce qui
semble vraiment clean et puissant.
Je vais essayer
de faire un F12 en utilisant les
rideurs.
C'est une source open.
Je peux aller au code source.
C'est déjà sur le disque.
Est-ce que les rideurs utilisent un compiler de déco?
Ou est-ce que les source symboles sont en train?
Je pense que c'est un compiler de déco.
Je ne suis pas sûr.
Si on peut regarder le code source,
c'est quoi le code source?
C'est un code source, non?
Oui, c'est un code source.
Mais il corolle
pour les symbols PDB de github.
Peut-être.
Vous pouvez dire si il y a des commentaires en ligne.
Oui, il y a des commentaires en Epsomal.
Donc, peut-être
si je regarde...
Je regarde le path
de l'envers.
Et c'est un host de rideurs.
Le code source cache.
C'est difficile de dire si c'est code source.
Mais oui, il ne ressemble pas
de décompiler
un code plus méchant.
Oui, certains décompiler
regardent l'envers. C'est difficile de dire
ce que cela fait.
Donc, ceci est en parler de l'API.
Pour la majorité de features
que l'on vérifie, il y a 3 approaches
pour les configurer.
Il y a l'approche statique
qui affecte tous les tests.
Vous pouvez avoir
une approche instantanée
pour les settings.
Vous pouvez mettre un instance
de settings, appeler
les settings custom, qui sera
l'inherent de l'envers.
Ces settings peuvent être re-utilisés
par plusieurs tests différents.
Vous pouvez le partager
dans l'escope que vous voulez.
Il y a aussi l'API fluide
qui est généralement
pour les petits tests
individuels.
Je pense que c'est le meilleur
des des meilleurs des mondes.
Vous choisissez
où vous voulez les settings pour appeler.
Ça fait le sens.
Je pense que les gens globales
ont voulu changer le directeur
pour que les files soient rétendus.
Je ne sais pas si c'est le cas.
Mais les scobres peuvent être
par test.
Vous avez des scopes différents.
Vous avez mentionné que ce launch
est des tools de défis.
Je pense que quand vous vous rendez
un build agent, un CICD,
il y a des moyens de le changer.
Vous ne vous avez pas besoin.
À la box,
ce que vous parlez de défis
est un outil de défis
qui est un outil de défis
que les libraries de snapshot
sont très différents.
Je l'ai écrit en un moyen
d'être consommé par des libraries.
L'outil de défis est consommé
par des tests de test,
mais en termes de votre question,
quand vous vous rendez un build
en service, il y a un build
dans le service de défis.
Il regarde les variables
et les autres
des récits de la construction.
Il ne vous met pas des tools de défis
si vous vous rendez un service de défis,
des actions de github,
il y a un dozen qui s'étend.
Il y a aussi un code API
où vous pouvez évoquer
votre propre logic sur
comment vous vous rendez un build.
Vous pouvez aussi
évoquer votre code d'application
et vous pouvez décider de déçir le build.
Je suis content de vous expliquer pourquoi je fais ça.
Vous ne vous rendez pas réellement pas
quand vous parlez d'un autre personne.
C'est vraiment cool.
Je suis sûr que si
le développement local de test
s'est fait, vous avez un bon défis
et que vous vous rendez un outil
de console, vous vous rendez un outil
de défis, mais vous ne pouvez pas faire ça
si vous avez des trucs.
Si c'est un texte,
l'exception de la faune
a le parc du file
et le fil du texte
pour des gros blocs de texte
et des manières de tweaking
pour que vous avez des petits bits de texte.
Pour les assets de binaire,
il y a des documentations
pour les features de différents services
qui disent que quand il ne faille
par convention,
c'est de copier les files
pour les outils de la faune
comme les assets de test.
Vous pouvez donc déployer ces assets.
En général,
les assets
seront des blocs de base
d'accès.png.
Vous déployez ça,
vous le renommez à vérifier
et vous le vous rendez au top
sur votre disc local.
Vous vous rendez à un défis et vous dites
que c'est ce que vous avez fait.
C'est pas possible
pour un défis
pour faire ça à la box
parce que ces features
sont des files en Github Action
ou...
Je pense que c'est la thing local
que vous avez déclaré
de copier le file au top du file.
J'ai remarqué que ça
s'est passé automatiquement
parce que le défis est la première
à lancer, même si c'est le premier run,
donc que vous n'avez pas un snapshot
à l'époque,
c'est la première à lancer
ce qui est mon défis choisi,
et sur le gauche
il y a des
choses qui ont été faites,
les codes actuales,
j'ai un file en Github Action
et sur le défis, je peux
copier le file à droite,
et ça s'est accepté.
Je n'ai pas de copier le file.
Donc, les défis de Github Action
ont un bouton, un shortcut,
un shortcut,
que vous voulez voir pour votre défis,
qui dit excepté ce changement,
c'est juste de streamer votre workflow.
En termes du file empty,
comment pensez-vous
que le file empty est créé
pour un document en Word
ou un PDF?
Il y a un petit hack
dans un projet différent
que j'ai consommé, called empty files,
qui a un whole bunch
de files de 1 kilobit ou 2 kilobit,
pour toutes les formats de document.
C'est requiert
parce que beaucoup de tools de défis
que vous avez créé
ont été éros, si vous comparez
un nouveau file avec un file non existant,
comme ça, le file ne vous permettra pas.
Donc, je vais créer un file 0.
Et c'est comme, non,
c'est pas un document en Word,
c'est juste d'éros.
Donc, il y a
50 formats différents
que cela fonctionne au bouton.
Donc, quand vous créez
un file empty vérifié
pour un Diff, vous avez un petit file
sur un disc. C'est un peu hacky.
Je n'aime pas les tools d'un Diff
pour soutenir un file non existant,
parce que c'est le premier temps.
Ce n'est pas vraiment leur modèle de business.
Je t'aime le fait que
vous faites ce nouveau partage, ce n'est pas votre travail.
Mais tous ces petits points de paix
que vous avez dédié?
Je l'utilise beaucoup à la travail.
Mais oui, c'est...
C'est un des années de jouer
avec différentes libraries et de travailler sur comment
faire cela. Et chaque fois que je vous ai
fait des frictions, ou que quelqu'un a fait des frictions,
je pense vraiment beaucoup
et que je travaille en un moyen de...
Qu'est-ce que la meilleure chose que nous pouvons faire
dans ce scénario? Et oui,
le Diff engin est...
Sans cela, le test de snapshot est
très difficile de faire un argument.
Il s'agit juste de ceci au suivant.
Je pense à la première fois que je vous ai dit
que dans les dernières épisodes,
dans un autre cas, on a parlé de test
en quelque forme dans beaucoup d'épisodes.
Je pense qu'il y a un épisode
où j'ai été joined par Jason Balk
en parlant de C-Sharp9 source
générateurs. Et on a parlé un peu de test
dans cela. Et en pensant sur ça,
ça ressemble à un bon use
pour le test de snapshot, où le snapshot
est la code source outputée
que votre source générateur est en génération.
Il y a une extension pour le verre,
si ça le fait. Oh, vraiment?
Vous avez une extension pour tout.
Oui, donc vous passez
dans le... Je ne peux pas le remercier
de ce qu'on appelle l'instance, mais c'est
effectivement un code DOM.
L'output de ça est un exemple
que vous passez à Roslyn.
Si vous passez cet exemple
sur le verre, quand vous utilisez
cet adien, ça se surmonie
à la code C-Sharp pour vous
et le snapshot test.
Je veux juste dire pour les listeners
que ce n'était pas une question de connaissance.
Quand je m'ai mentionné les generators de source,
je n'ai pas compris qu'il y avait une extension.
Je vais aller au site et voir
toutes ces extensions, car il y a
des milliers de milliers.
Il y a un autre cool
que nous fais, qui est
le scénario où vous avez un snapshot test.
Normalement, ça se passe
quand vous avez un snapshot test
sur l'output de un browser. Vous utilisez
un puppeteer ou un PlayWrite
pour le test. Vous êtes en train
de tester un browser et vous avez un snapshot
de votre browser. L'output de ça est
html et png.
Vous vous réveillez à la disc, et c'est
bien, vous le vérifiez.
Mais après, quelqu'un autre se débrouille
sur une machine un peu différente.
Et, quand vous utilisez un snapshot,
ce n'est pas consistant.
Des milliers de changements
pour les systèmes peuvent causer
des milliers de changements pour
l'output de un snapshot. Pas vraiment perceptible
pour une personne, mais sur le disk
ce file est différent.
Il va falloir tester.
Il y a un
feature vérifié
qui fait des comparisions de la losser.
Vous pouvez pluger
des algorithmes
pour les comparisions d'image.
Vous avez des thresholds
pour les comparisions, et vous avez
un peu de l'agriculture.
Vous pouvez dire que, si
il n'y a que 1 ou 2 pixels
dans ce file, nous ne sommes pas vraiment
en train de faire ça. Vous vous le débrouillez
et vous le débrouillez en bas de la fragilité.
Mais ça veut dire que vous pouvez
réduire le fausse
de tests.
Ce n'est pas un changement
de la vie, quand l'outil est
encore valid.
Je sais que vous avez
une chute sur Defenge & Tray.
Vous n'avez pas utilisé ça ?
Non, ne vous inquiétez pas.
Je n'ai pas
commencé à utiliser ça cette semaine.
C'est un des deux
qui a fait la production code.
Je n'ai pas eu
beaucoup de temps à jouer, mais je l'ai installé.
Parce que
je n'ai qu'un couple de tests
en utilisant Verify.
Ça verifie que c'est un peu
un peu de choses, car c'est un test de integration.
Mais je l'ai trouvé que,
parce que quand le test a fail,
je suis pas mal à
faire un test de vignette. Je sais que je suis
pas mal à faire un test de vignette.
Mais je vais vous parler de votre point.
Je vais essayer de vous convaincre
que c'est cool.
Defenge & Tray
est quelque chose qui s'étend
dans le trait de Windows.
C'est seulement Windows
spécifique. Je suis en train de travailler
sur la version Mac.
Et ça traite
tous les snapshots
sur votre système, across
toutes les solutions différentes.
Ça les engendre dans un UI.
Mais vous pouvez optionnellement
regarder dans, et vous pouvez
choisir et choisir
en groupant ou individuellement si vous voulez
oublier ou décliner des changements.
Il peut aussi manuellement ouvrir
les tools pour ces changements
sans avoir besoin de test de regrouper.
C'est assez utile
si vous avez un site
de test de snapshot,
et vous avez un change
où vous décidez de changer
de font. Vous pourrez
avoir
des tests de tests.
Vous ne voulez pas ouvrir
tous ces tests dans votre tool de déf
et les réexcepter plus en plus.
Defenge & Tray a un outil
où vous pouvez juste réexcepter
tous ces changements.
Ou grouper ou revuire
dans le même genre que vous voulez.
Dans le cas de votre use case
où vous avez utilisé un tool
spécifique de déf
je l'ai trouvé que ça ne fonctionne
que si vous avez un subset
de types de file
que cet outil aime.
Donc, vous pouvez
faire un test
de snapshot de binary
que cet outil n'aime pas. Et puis vous vous
vous en popez plusieurs outils pour différents scénarios.
Vous pouvez trouver un peu facile
d'avoir une approche de keyboard
qui le managera avec différents outils.
Donc, vous avez un outil global
de hotkey, donc vous n'avez pas
de poursuivre le mouse
et le sélectionner dans le système Tray.
Oui, donc il y a
3 hotkey bindings que ça fait.
Il y a un discard all,
il y a un accept all
et puis il y a un accept
que tout ça est currently visible.
Donc, quand vous faites
un test de snapshot,
un snapshot visible
est un qui est présentement un outil
d'offre pour cet outil.
Donc, vous pourriez, si vous êtes dans le bad state
vous avez beaucoup de tests de failings,
vous pouvez être manuellement
en faisant un pass 1x1.
Donc, le médecin peut être dans un state de fail
où vous pouvez avoir 5 outils en Diff
tous les outils sont bons.
Vous pouvez faire un shortcut
qui accepte les outils de vies.
Je espère que le plus je utilise
et le plus je vais utiliser
le système Tray
je pense que parce que
je commence par
faire un test de integration
en faisant un tour.
C'est juste une chose et je sais que c'est Jason
mais je suis sûr que, basé sur votre description
je vais être atteint pour ce système Tray
très bientôt.
Je vais savoir comment vous allez.
Il y a un Mac version
dans le travail pour ça.
Je suis un personne Windows
et c'est juste facile. Je suis en train de faire des formes de wind
à l'époque.
Et bien sûr, j'ai eu la technologie
que je ne peux pas faire de n'importe quoi.
Mais c'est bien
parce que je fais tout le temps
sur ma machine de la dév.
C'est bien de la faire
en formes de wind
donc 18M RAM.
Il fonctionne.
Vous avez regardé les autres add-ins
et vu si il y a quelque chose que vous voulez utiliser ?
J'ai ouvert ça.
Je pense que pour les outils de l'exemple
je ne les ai pas tous.
Vous avez mentionné les generators de source
Microsoft Logging
Windforms
et oui, je vais les lire.
HTTP, Samo, Samoen,
SQL Server,
Flash, je ne sais pas quoi Flash c'est.
Quibble, Aspo,
Cosmos et ServiceBus
ICSARP code decompiler.
C'est ce que vous avez mentionné ?
C'est ce que j'ai écrit pour que
quand je fais des complotations
de decompiling,
je peux faire un test de snapshot
pour les données de l'assemblée.
Je peux passer dans l'assemblée
et ça me donnera le C-Sharp.
J'ai une idée
de ce que ça a fait.
C'est une très bonne chose.
Je ne pense pas que personne n'aie pas utilisé ça.
Imgsharp,
AngleSharp, GrapeCity,
SyncFusion,
j'utilise SyncFusion pour clients,
c'est assez utile. Docknet,
Hedlis Browsers, Blazor,
ImageMagic, ASP.net,
Core, Entity Framework.
Je dois avoir un Nextbut...
Je dois avoir un Nextbut
pour que ça soit pagé,
vérifié par les APIs,
Pandoc, ORM Lite,
Oh, Martin aussi.
Martin ?
Je pense que pour la dernière fois que vous avez écrit,
je n'ai pas de biais. Je ne pense pas que vous avez officiellement fait ça.
Vous êtes en train de regarder les repositories,
oui ?
Si vous regardez la liste
de les supports,
il y a probablement 3 ou moins de ce que vous avez listé.
Oui, ok.
C'est intéressant que vous ayez un projet avec Martin,
oui, c'est le document database
de Postgres.
d'AventsStore.net
d'Avents.
d'Avents.net
Ok, donc peut-être que je ne m'ai pas compris
ce que c'était,
d'Avents.net, Transactional DocumentDB
d'Avents.net
Oui, je pense que RavenDB,
mais la biais de la back-end
est Postgres JSON
parce que Postgres a un support très bon
pour les documents JSON
et Martin est en train de
l'élaboration de la fonctionnalité
d'Avents.net.
Mon plan était de faire le même
support pour Martin
que l'Energy Framework.
Donc, le test de Snapchat
et Martin, un schema
ou des queries, etc.
pour qu'on puisse avoir
une visibilité de ce qui se passe.
Donc, à la back-end, vous avez mentionné Microsoft Logging.
Il y a, je pense,
un pattern que j'ai utilisé
qui je n'appelle
Recording pour le moins de plus de termes.
Mais dans ce contexte, c'est
que l'application de la biais de la biais
qui vous permet de plug-in
et de l'écouter à l'Events.
Vous pouvez récourir ces événements
et placer dans un snapshot.
C'est un peu différent de
ce que vous avez fait si vite.
Vous êtes juste passés dans un modèle
pour vérifier.
Donc, si vous voulez
dire...
Si vous avez quelque chose qui parle d'un web API
vous faites un range
après un range dans votre test
vous faites
Recording
HTTP calls.
Vous faites votre acte
et vous vérifiez.
Vous avez seulement besoin d'un call qui dit
Recording HTTP.
Dans les covers, quand un vérifier
le point que vous avez passé,
ça va se vérifier et traiter.
Vous pouvez aussi vérifier
un lookup de
si vous avez récouru quelque chose d'autre
dans ce processus.
Vous pouvez aussi appender les statements
de recours à ce snapshot.
Vous pouvez récourir
des statements de log avec Microsoft Logging.
Vous pouvez récourir des queries
SQL Server. Vous pouvez récourir
des calls de web API
par HTTP. Vous pouvez récourir
des interactions de Cosmos DB
pour pouvoir faire ça, et surtout pour les tests de
les APIs de legacy.
Vous pouvez s'assurer
que ce que vous avez passé
sur les covers, sans changer
l'application de la production.
Vous pouvez dire
Recording HTTP calls
durant ce test. Vous ne devez pas changer
ce truc, vous ne devez pas changer
l'application de la code pour passer
le code.
Vous pouvez faire le recording avec un API
ou un libraire
qui appuie
de la production.
Vous pouvez faire le recording
avec un service.
Je pense que
dans une architecture de micro-service
où vous avez des services
d'application de la production,
ça vous ressemble
à un mediator.
Vous avez des calls
pour le mediator
dispersé
par la base de la code.
Vous êtes testant
quelque chose, un test de l'intégration
ou un test de l'unité, c'est
rélevé. Vous voulez
récourir toutes les interactions
que le mediator fait. Le message
s'envoie en partage de ce test
et vous voulez pouvoir capture
ce truc. Ideally, vous voulez pouvoir
faire ça sans
rétablir l'information
de la code pour le test, car ça serait
difficile de la surface.
C'est pourquoi je disais
que vous pouvez le mediator
pour capture l'information
et les supporters du 1er classiste.
Je pense que c'est possible
de la façon dont les gens utilisent le mediator.
Je ne les utilise pas
dans le call stack
comme vous le disiez.
Il serait le point de la
entrée à l'application.
Par exemple, un contrôler
sur le web API
se vend un
évent-handler qui répond à
un message le plus courant que la
message estiver app proportelimment
Baker dan
dont nous ne sortes pas au
contact qui met de수
Netherlands
dit N такой
où a lot on a
sud évent
cynique
bat Doncs
des
łąres
sur Prémar,
le perforat
tempire
f haven
moi
Donc, si les listeners utilisent le mediator, dans le sens où ça serait utile,
je pense que ça va être bien de choucher.
C'est intéressant d'avoir un approche de la recording.
Tout le place et le code base que j'ai regardé,
j'ai ce petit feature que je veux faire pour faire quelques tests,
on va juste récourir,
comment beaucoup de statements de sequel
sont exécutées par le code que vous êtes testant ?
Les gens ont des numéros, 3, 4...
Comment est-ce que le sequel est exécuté ?
Il y a quelques lines.
On va juste récourir les statements de sequel
par le code qui est fait en snapshot et en test.
Vous avez ce genre de sequel,
et ils disent,
« Ah, c'est pas cool ».
Je ne peux pas faire ça parce que je peux le relâcher.
Je suis vraiment intéressé à prendre un code de ma,
et faire exactement ça.
Je suis assez fier de faire ça, à l'heureuse.
Ennemi Framick a un bon travail de plasterer sur ça.
Je pense que les ORMs font ça,
mais il y a juste beaucoup de choses à savoir
dans le scope des ORMs
pour avoir l'analyse la plus haute de l'entraînement
de comment un statement de link
transforment le sequel.
Et souvent, vous operatingz à un niveau à l'arrivée.
Vous ne faites pas...
Ça ne vous augmente pas
à faire du travail sur ce qu'il y a en sequel.
Et quand les gens le font,
c'est un truc responsable.
Ils le font.
« Ah, ce qu'est très lent.
C'est le tour de ce sequel,
le traquement de la track. »
Je pense que c'est ce qu'il y a.
C'est le tour de ce qu'il y a en environnement.
On a un tour de la suite de statements.
On va faire un tour de ce qu'on a fait.
C'est génial.
Vous avez fait un tour de ce qu'on a fait.
Mais vous n'avez pas fait un tour de ce qu'on a fait.
Ce n'est pas un regressage.
Vous n'avez pas fait un tour de ce qu'on a fait.
Ce qui pourrait avoir un problème similaire.
Et vous avez pu faire un tour de ce qu'on a fait.
Ça a pris beaucoup de temps.
Et c'est franchement un peu...
Donc, si vous faites ce que vous faites
comme part de votre régime de test,
et vous avez le snapshot testé,
ça devient de la seconde nature
de l'exploitation de ce qu'on a fait
quand vous faites le développement.
Vous pouvez le faire avant.
ought respect le projet d'enn remplir.
Est-ce que vous avez effectué
les tul Bai Break preparedness ,
Je l'ai fait juste cette semaine, parce que nous avons appris à la fréquence NW6,
et j'ai re-run les tests, et j'ai eu 100 tests de test.
Tout le sequel que j'ai fait, a changé dans des petites manières.
Ce n'était pas mal, il n'y avait pas de bugs, et ils avaient fait des optimisations pour les performances.
Donc je les ai prouvues, mais je suis content de les faire à l'arrivée,
parce que si ils avaient fait des changements pour que ce soit un bloc de statements de sequel,
ou des trucs qui n'ont pas été optimisés, vous allez voir ça.
Et sinon, vous ne le verrez pas.
La plupart ne vont pas...
Il n'y a pas de manière pour que vous puissiez vérifier les sequels
qui sont créés par une app non trivial.
Ce n'est pas possible pour un humain.
Vous avez déjà dit ça, quand vous parlez de la scrubbing.
Mais les scrubbers automatique, ils ont des changements de l'air trivial et de l'air blanc ?
Non, ils ne l'ont pas.
C'est parce que c'est très difficile de dire ce qui est trivial.
C'est vrai.
C'est différent, selon ce que c'est.
Oui, il y a des prétifes que vous pouvez appeler.
Donc votre code peut être généré en HTML, et c'est généré en minifiant HTML.
Il y a un plug-in pour Angle Sharp, qui va prétifier l'HTML et faire le bon tour,
pour que le snapshot soit humain et readable.
C'est opté.
Vous pouvez faire le même avec les statements de sequel,
et les scrubbers XML, et Jason.
Vous pouvez faire le même que vous voulez.
Mais c'est toujours opté, car vous ne pouvez pas dire que si vous avez passé en HTML,
que vous espérez être minifiant, car c'est le design de l'air.
Vous serez surpris si le snapshot vous a donné une autre HTML que vous avez passée.
Tout ça est opté.
Je vais vous remercier à ce que vous avez dit avant,
que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
et que vous avez eu des points de vue,
Episode suivant:
Les infos glanées
TheUnhandledExceptionPodcast
Tags
Developer Productivity with (me!) Dan Clarke