Modulo:ScribuntoUnit/man: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m fix tag HTML |
m Errore di digitazione |
||
(2 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1:
{{Man modulo}}
Questo modulo fornisce le funzionalità di [[unit testing]] per altri moduli [[Wikipedia:Lua|Lua]]. Per
== Struttura del modulo di test==
Riga 6:
Per preparare un modulo di test (test suite), iniziate con il codice seguente:
<
local myModule = require('Module:MyModule') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
</syntaxhighlight>
Potete quindi aggiungere funzioni di test individuali all'oggetto <code>suite</code> object. Ogni funzine che inizia con <code>test</code> è trattata come un test. (Altre funzioni saranno ingorate da ScribuntoUnit, ma possono essere nei test.)
<
function suite:testSomeCall()
self:assertEquals('expected value', myModule.someCall(123))
Riga 24:
self:assertEquals('other expected value', myModule.someOtherCall(456))
end
</syntaxhighlight>
I test che scrivete dovrebbero fare [[Asserzione (informatica)|asserzioni]] che ScribuntoUnit controllerà verificare che siano vere. Per esempio, <code>assertEquals</code> controlla che entrambi gli argomenti che gli vengono passati sono uguali. Se ScribuntoUnit trova un'asserzione falsa il test fallirà generando un messaggio di errore. Il messaggio di errore indica qual è l'asserzione fallita (al momento non vengono effettuati altri controlli).
Riga 30:
Il modulo di test deve terminare ritornando l'oggetto <code>suite</code>.
<
return suite
</syntaxhighlight>
== Eseguire i test ==
Riga 44:
L'ultimo parametro di tutti i metodi di test è un messaggio che viene mostrato se la validazione fallisce.
<
self:assertEquals('expected value', myModule.someCall(123), 'This tests whether the function x does y.')
</syntaxhighlight>
=== assertTrue, assertFalse ===
<
self:assertTrue(actual, message)
self:assertFalse(actual, message)
</syntaxhighlight>
Questi controllano se il risultato dell'asserzione è <code>vero</code> o <code>falso</code>. Nel caso di un un controllo di falsità notate che in Lua i valori <code>false</code> e <code>nil</code> sono falsi, mentre tutto il resto viene valutato vero. Per esempio il numero 0 o una lista vuota sono "veri" in Lua.
<
self:assertTrue(2 + 2 == 4)
self:assertTrue('foo')
self:assertFalse(2 + 2 == 5)
self:assertFalse(nil)
</syntaxhighlight>
=== assertStringContains ===
<
self:assertStringContains(pattern, s, plain, message)
</syntaxhighlight>
Questi test controllano se il <code>pattern</code> viene trovato nella stringa <code>s</code>. Se <code>plain</code> è vero allora il <code>pattern</code> viene interpretato come testo letterale, altrimenti viene interpretato come [[mw:
Se il pattern
<
self:assertStringContains("foo", "foobar") --
self:assertStringContains("foo", "fobar") --
self:assertStringContains(".oo", "foobar") --
self:assertStringContains(".oo", "foobar", true) --
</syntaxhighlight>
=== assertNotStringContains ===
<
self:assertNotStringContains(pattern, s, plain, message)
</syntaxhighlight>
Questa è l'opposto di <code>assertStringContains</code>. Il test fallirà se <code>pattern</code> viene trovato nella stringa <code>s</code>. Se <code>plain</code> è vero allora <code>pattern</code> viene interpretato come stringa letterale, altrimenti viene interpretato come [[mw:
<
self:assertNotStringContains("foo", "foobar") --
self:assertNotStringContains("foo", "fobar") --
self:assertNotStringContains(".oo", "foobar") --
self:assertNotStringContains(".oo", "foobar", true) --
</syntaxhighlight>
=== assertEquals ===
<
self:assertEquals(expected, actual, message)
</syntaxhighlight>
<
self:assertEquals(4, calculator.add(2, 2))
</syntaxhighlight>
=== assertWithinDelta ===
<
self:assertWithinDelta(expected, actual, delta, message)
</syntaxhighlight>
<
self:assertWithinDelta(0.1, calculator.subtract(0.3, 0.2), 1e-10)
</syntaxhighlight>
=== assertDeepEquals ===
<
self:assertDeepEquals(expected, actual, message)
</syntaxhighlight>
Testa quando il primo parametro è uguale al secondo. Se i parametri sono tabelle, vengono confrontati con ricorsione, e i loro [[mw:Estensione:Scribunto/Manuale di riferimento al Lua#Metatabella | __eq metametodi]] sono riconosciuti.
<
self:assertDeepEquals(table1, table2)
</syntaxhighlight>
=== assertTemplateEquals ===
<
self:assertTemplateEquals(expected, template, args, message)
</syntaxhighlight>
Verifica se il primo parametro è uguale a quello di una chiamata di template. Il secondo parametro è il nome del template, il terzo è una tabella contenente gli argomenti del template.
<
self:assertTemplateEquals(4, 'add', {2, 2}) --
</syntaxhighlight>
=== assertResultEquals ===
<
self:assertResultEquals(expected, text, message)
</syntaxhighlight>
Questo test verifica se il primo parametro è uguale all'espansione di un testo wiki. Il secondo parametro può essere un qualunque testo wiki.
<
self:assertResultEquals(4, '{{#invoke:Calculator|add|2|2}}')
</syntaxhighlight>
Notate che alcuni tag speciali scritti in notazione XML, come per esempio <code><nowiki><pre></nowiki></code>, <code><nowiki><nowiki></nowiki></code>, <code><nowiki><gallery></nowiki></code> e <code><nowiki><ref></nowiki></code> non possono essere confrontati direttamente. Questi tag sono convertiti in [[Aiuto:Strip markers|strip marker]] prima di essere
=== assertSameResult ===
<
self:assertSameResult(text1, text2, message)
</syntaxhighlight>
Questo verifica se l'espansione di una data stringa di testo wiki, è uguale all'espansione di un'altra stringa di testo wiki.
<
self:assertSameResult('{{add|2|2}}', '{{#invoke:Calculator|add|2|2}}')
</syntaxhighlight>
Notate che alcuni tags scritti in notazione XML non possono essere testati correttamente, vedi la nota per la funzione <code>assertResultEquals</code> più sopra.
|