déplace les contenues dans un repertoire par année

This commit is contained in:
Yannick Francois
2020-03-27 22:43:43 +01:00
parent 1f896d1afa
commit d69f91d2dd
808 changed files with 825 additions and 874 deletions
@@ -0,0 +1,157 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta name="generator" content="Hugo 0.22.1" />
<meta charset="utf-8">
<title>Yannick François - Elsif.fr</title>
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf (ou ya_f)."/>
<meta name="description" content="Le site de Yannick François. Développeur Senior, Responsable Produit, Pédagogue. Je travail chez Scopyleft"/>
<meta name="keywords" content="code, développement, programmation, apprentissage, apprendre, lean, agile, logiciel, tdd, objet, refactoring, libre, creative commons, linux, unix"/>
<meta name="author" content="Yannick François, https://elsif.fr"/>
<meta name="designer" content="Yannick François, https://elsif.fr"/>
<meta name="geo.placename" content="Poissy, Ile de france, France"/>
<meta name="robots" content="index,follow" />
<meta name="language" content="French" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="index" title="Yannick François / Développeur / Pédagogue" href="index.html" />
<link rel="stylesheet" href="/css/201912-elsif.css" media="all"/>
<link rel="alternate" type="application/rss" href="/feed.xml" title="elsif.fr/feed" />
</head>
<body>
<article>
<h1>Ruby : Test Unitaire</h1>
<p>Ruby bénéficie comme beaucoup dautres langages modernes de son framework de test. Voici donc une petite documentation sur <em>comment écrire un test unitaire</em> pour Ruby.</p>
<p><em>Pour ceux qui ne savent pas ce quest un test unitaire, je vous renvoie sur larticle</em> <a href="http://fr.wikipedia.org/wiki/Test_unitaire">Test Unitaire [wikipedia]</a></p>
<p>Pour commencer il nous faut importer la librairie <code>Test::Unit</code></p>
<pre>
{% highlight ruby %}
require "test/unit"
{% endhighlight %}
</pre>
<p>Rien que cela nous permet déjà de faire un premier test en executant notre script.</p>
<pre>
{% highlight bash %}
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
Finished in 0.000607 seconds.
0 test, 0 assertions, 0 failures, 0 errors
{% endhighlight %}
</pre>
<p>Le fait dinclure la librairie de test unitaire permet davoir un comportement par défaut qui va:</p>
<ul>
<li>Charger la suite de test à executer</li>
<li>lancer les tests</li>
<li>faire laffichage des resultats de test</li>
<li>faire un compte rendu de cette execution</li>
</ul>
<p>Ajoutons un test maintenant</p>
<pre>
{% highlight ruby %}
require "test/unit"
class StringTest < Test::Unit::TestCase
def test_length
s = "Bon test à tous !"
assert_equal(17, s.length)
end
end
{% endhighlight %}
</pre>
<p>Nous avons défini une classe, celle-ci doit étendre TestCase. Cela permet au framework de test de sy retrouver.</p>
<p>Chaque méthode de test définie ensuite doit contenir <code>test</code> en début de nom (le caractère <code>_</code> nest placé que pour une meilleur lisibilité et selon les conventions couramment appliquées en Ruby)</p>
<p>Les méthodes assert (ici <code>assert_equal</code>, mais il en existe beaucoup dautres) permettent deffectuer un test. Ici un test d’égalité, mais nous pourrions également vérifié une différence, un bouléen répondant vrai ou faux et dautres encore (voir la documentation sur le <a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit/Assertions.html">module Test::Unit::Assertions</a>).</p>
<p>Après execution, voici le résultat:</p>
<pre>
{% highlight bash %}
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
.
Finished in 0.000802 seconds.
1 test, 1 assertions, 0 failures, 0 errors
{% endhighlight %}
</pre>
<p>Un test a été executé avec succès.</p>
<p>Ajoutons encore un test pour avancer:</p>
<pre>
{% highlight ruby %}
require "test/unit"
class StringTest < Test::Unit::TestCase
def test_length
s = "Bon test à tous !"
assert_equal(17, s.length)
end
def test_expression_substitution
assert_equal("", "#{'ah! ' * 3}")
end
end
{% endhighlight %}
</pre>
<p>Après exécution nous obtenons:</p>
<pre>
{% highlight ruby %}
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
F.
Finished in 0.000827 seconds.
1) Failure:
test_expression_substitution(StringTest) [testUnit.rb:12]:
<""> expectedbut was
<"ah! ah! ah! ">.
2 test, 2 assertions, 1 failures, 0 errors
{% endhighlight %}
</pre>
<p>Et voilà, comme vous laviez deviné, nous avons une erreur. Dans notre cas, lerreur viens de notre test.</p>
<p>On vois ici linterêt de mettre chaque test sur un domaine différent dans une méthode différente: on vois facilement quel type de test nous voulions effectuer. Dans le développement dune application complète, avec plusieurs dizaines dobjets à tester, et plusieurs dizaines de méthodes sur chacun deux, les erreurs dexécution de test peuvent devenir un vrai casse-tête.</p>
<p>Effectuons la correction:</p>
<pre>
{% highlight ruby %}
require "test/unit"
class StringTest < Test::Unit::TestCase
def test_length
s = "Bon test à tous !"
assert_equal(17, s.length)
end
def test_expression_substitution
assert_equal("ah! ah! ah! ", "#{'ah! ' * 3}")
end
end
{% endhighlight %}
</pre>
<p>exécution du test:</p>
<pre>
{% highlight ruby %}
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
..
Finished in 0.001273 seconds.
2 test, 2 assertions, 0 failures, 0 errors
{% endhighlight %}
</pre>
<p>Et voilà. Vous devriez être capables de commencer à écrire quelques tests, mais ce nest quun début !.</p>
<p><em><em>Cet article a été écrit pour le site de lassociation <a href="http://www.rubyfrance.org">RubyFrance</a>, vous pourrez le retrouver dans les documentations proposées par lassociation:</em></em> <a href="http://rubyfrance.org/documentations/test-unitaire/">RubyFrance: TestUnitaire</a></p>
</article>
<footer>
<ul>
</ul>
</footer>
</body>
</html>