Az Eiffeléhez és Alphardéhoz hasonló helyesség-ellenőrzési módszer nincs a nyelvben. Támogatja viszont az exception-helyességet, azaz a típusinvariáns megőrzésre van eszköz. A begin-end blokkoknak lehet ensure kitétele, ami a blokk minden lefutása után garantáltan végrehajtódik.
A profiler megmutatja, hogy hányszor lett meghívva egy metódus és mennyi ideig tartott a futása. Futtassuk a programot -r profile kapcsolóval, vagy a kódba írjuk be a következő sort: require 'profile'
Íme egy példa a Profiler használatára, melyben megszámoljuk a 12 karakter hosszú szavakat:
Test::Unit Framework az alábbi három főbb szolgáltatást nyújtja:
A Unit teszteket természetes módon nagyobb egységekbe foglalhatjuk, ezek a teszt esetek. A teszt esetek általában egy adott funkció összes tesztjét tartalmazza.
A tesztet tartalmazó osztály ősének a Test::Unit::TestCase osztálynak kell lennie. A metódusok amelyek az assertion-öket tartalmazzák "test"-el kell kezdődniük. Ez fontos ugyanis a Test::Unit ilyen kezdetű metódusokat vesz észre. Ha több metódus is szerepel egy tesztben akkor mindegyik kialakítja a tesztkörnyezetet majd kitakarít maga után. Ilyen esetekben használhatjuk a speciális setup, teardown metódusokat, amelyek minden függvény előtt illetve után végrehajtódnak.
A teszteket a "test" könyvtárba szokás tenni.
assert(boolean, [ message ] ) Megbukik ha a boolean false vagy nil. assert_nil(obj, [ message ] ) assert_not_nil(obj, [ message ] ) Az obj-nak nil-nek (nem nil-nek) kell lennie. assert_equal(expected, actual, [ message ] ) assert_not_equal(expected, actual, [ message ] ) Az expected és actual értékeknek egyezniük kell (vagy nem) az op== -t használva. assert_in_delta(expected_float, actual_float, delta, [ message ] ) Az actual_float értékének az expected_float delta sugarú környezetébe kell esnie. assert_raise(Exception, . . . ) { block } assert_nothing_raised(Exception, . . . ) { block } A block kivált (vagy nem vált ki) kivételt a felsoroltak közül. assert_instance_of(klass, obj, [ message ] ) assert_kind_of(klass, obj, [ message ] ) Az obj klass osztályúnak/típusúnak kell lennie. assert_respond_to(obj, message, [ message ] ) Az obj-nak tudni kell válaszolni a message üzenetre (szimbólum). assert_match(regexp, string, [ message ] ) assert_no_match(regexp, string, [ message ] ) A stringnek meg kell egyeznie (nem kell) a megadott reguláris kifejezéssel. assert_same(expected, actual, [ message ] ) assert_not_same(expected, actual, [ message ] ) Igaz (vagy hamis) az expected.equal?(actual). assert_operator(obj1, operator, obj2, [ message ] ) Az obj1-nek küldött obj2 paraméterű operátor üzenetnek igaznak kell lennie. assert_throws(expected_symbol, [ message ] ) { block } A block-nak az expected_symbol -al adott kivételt kell dobnia. assert_send(send_array, [ message ] ) A send_array[1]-ben tárolt üzenetet elküldve send_array[0]-nak igazat kell adnia (send_array többi része paraméter). żunk(message="Flunked") Mindíg megbukik.
Szokásos eszközöket nyújtja: step; brakepoint; step into, step over methods; stack frame, változók, memberfüggvények kiírása, threadek listázása.
rdb promptnál kiadott help parancs hatására láthatjuk az alábbi táblázatot:
Debugger commands: b[reak] [file:]line breakpoint-ot állít be a megadott sorhoz a fileban (alapértelmezettként az aktuális sor). b[reak] [file:]name breakpoint-ot állít a megadott metódushoz a fileban. b[reak] Kilistázza a megadott breakpoint-okat és watchpoint-okat. wat[ch] expr Break ha az expression igazzá válik. del[ete] [nnn] Törli a breakpoint-ot (nnn) (alapértelmezettként az összeset). disp[lay] expr Kiírja az expr értékét valahányszor a debuggeré az irányításl. disp[lay] Megmutatja display-eket. undisp[lay] [nnn] Törli a display-t (nnn) (alapértelmezettként az összeset). c[ont] Folytatja a végrehajtást. s[tep] nnn=1 Végrehajtja a következő nnn sort, belelépve a metódusokba. n[ext] nnn=1 Végrehajtja a következő nnn sort, átlépve a metódusokat. fi[nish] Végrehajtja az aktuális függvényt. q[uit] Kilépés a debugger-ből. w[here] Kiírja az aktuális stack frame-et. f[rame] where szinonímája. l[ist] [start--end] Kilistázza a sorokat start-tól end-ig. up nnn=1 Feljebb lép nnn szintet a stack frame-ben. down nnn=1 Lejebb lép nnn szintet a stack frame-ben. v[ar] g[lobal] Kiírja a globális változókat. v[ar] l[ocal] Kiírja a lokális változókat. v[ar] i[stance] obj Kiírja az obj példányváltozóit. v[ar] c[onst] Name Kiírja a Name nevű class vagy modul konstansait. m[ethod] i[nstance] obj Kiírja az obj példány metódusait. m[ethod] Name Kiírja a Name class vagy modul példánymetódusait. th[read] l[ist] Kilistázza az összes futó thread-et. th[read] [c[ur[rent]]] Kiírja az aktuális thread státuszát. th[read] [c[ur[rent]]] nnn nnn thread legyen az aktuális és állítsa meg. th[read] stop nnn nnn thread legyen az aktuális és állítsa meg. th[read] resume nnn Folytassa az nnn thread-et. [p] expr Értékelje ki az expr utasítást az aktuális környezetben. empty Üres parancs az utolsó parancsot ismétli.
A debug promptból az exit paranccsal léphetünk ki.
Egy szemléletes példa: