utilise un repertoire content uniquement

This commit is contained in:
Yannick Francois
2020-02-07 22:28:25 +01:00
parent 580136cc08
commit 15afbf1f15
483 changed files with 42 additions and 14990 deletions
@@ -0,0 +1,190 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Yannick François - Les pieds dans le code</title>
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf aka pouype."/>
<meta name="description" content="Yannick François's website. Senior developer, Code pedagogist. /ut7 teammate, proud member of Electrolab, the crazy hackerspace. Eternel supporter of April, a french association about freesoftware."/>
<meta name="keywords" content="code, développement, lean, agile, logiciel, tdd, objet, ruby, site perso, personnel, ruby on rails, refactoring, openbsd, bsd, libre, creative commons, 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 / Developer" href="https://elsif.fr" />
<link rel="stylesheet" href="/css/knacss.css" media="all"/>
<link rel="stylesheet" href="/css/elsif.css" media="all"/>
<article>
<h1>
Ruby : Test Unitaire
</h1>
<p>Ruby bénéficie comme beaucoup d&rsquo;autres 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 qu&rsquo;est un test unitaire, je vous renvoie sur l&rsquo;article</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 d&rsquo;inclure la librairie de test unitaire permet d&rsquo;avoir un comportement par défaut qui va:</p>
<ul>
<li>Charger la suite de test à executer</li>
<li>lancer les tests</li>
<li>faire l&rsquo;affichage 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 s&rsquo;y 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> n&rsquo;est 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 d&rsquo;autres) permettent d&rsquo;effectuer un test. Ici un test d&rsquo;égalité, mais nous pourrions également vérifié une différence, un bouléen répondant vrai ou faux et d&rsquo;autres 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 l&rsquo;aviez deviné, nous avons une erreur. Dans notre cas, l&rsquo;erreur viens de notre test.</p>
<p>On vois ici l&rsquo;interê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 d&rsquo;une application complète, avec plusieurs dizaines d&rsquo;objets à tester, et plusieurs dizaines de méthodes sur chacun d&rsquo;eux, les erreurs d&rsquo;exé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 n&rsquo;est qu&rsquo;un début !.</p>
<p><em><em>Cet article a été écrit pour le site de l&rsquo;association <a href="http://www.rubyfrance.org">RubyFrance</a>, vous pourrez le retrouver dans les documentations proposées par l&rsquo;association:</em></em> <a href="http://rubyfrance.org/documentations/test-unitaire/">RubyFrance: TestUnitaire</a></p>
<article>
<footer style="font-size:75%;text-align:right"><em><a href="/feed.xml">suivre les articles</a></em></footer>
</body>
</html>