2009-03-20 20 views
2

tryng heraus einige smalltalk + TDD + "good practices" Ich habe in ein bisschen hässlich Block laufen:Smalltalk und Assertions

Wie mache ich eine Behauptung in GNU Smalltalk?

Ich suche nur für einen einfachen ifFalse: [Die] Art der Sache

Antwort

2

Dies ist der Code für assert ist: von Squeak (was ich empfehlen Sie lieber als GNU verwenden):

assert: aBlock 
    "Throw an assertion error if aBlock does not evaluates to true." 
    aBlock value 
     ifFalse: [AssertionFailure signal: 'Assertion failed'] 
+0

Warum würden Sie die GNU-Version nicht empfehlen? – Eyvind

+0

Mangel an Unterstützung - Quietschen hat eine beteiligtere Gemeinschaft und Squeak macht mehr Spaß. –

+0

Mehr Unterstützung kommt von mehr Leuten, die es benutzen. Und GNU Smalltalk entwickelt sich wirklich gut. Es gibt ziemlich viele Leute, mit Paolo Bonzini als Haupttruppe. –

0

Es ist einfach . In Ihrer Testmethode, die Sie schreiben:

self assert: 1 + 1 = 2 

Aber zuerst müssen Sie eine Testklasse als Unterklasse von Testcase (in Squeak) zu schaffen, zum Beispiel:

TestCase subclass: #MyTest 

Hier können Sie Testmethoden schreiben, die Namen müssen immer mit 'Test', zum Beispiel starten:

testBasicArithmetics 

self assert: 1 + 1 = 2 
+0

Offensichtlich, dass "Matrix nicht versteht # assert:". – Tordek

+0

Ja, Sie müssen natürlich eine Testklasse machen und dort Aussagen in Testmethoden machen. Siehe mein Update. –

+1

Entschuldigung, es war ein Missverständnis: Ich meine keine Unit-Test-Behauptungen, sondern Design-by-Contract-Behauptungen. (IE, Pre/Post-Condition Checking innerhalb der Methode.) – Tordek

2

sowie Selbst assert: [... einiger Block]

funktioniert für Blöcke & Nicht-Blöcke, da das Senden von #value an Object selbst zurückgibt.

0

Es wurde oben vorgeschlagen #assert:-Object, hinzuzufügen, sondern würde ich #assert zu BlockClosure hinzufügen (oder was auch immer [] class ist in GNU Smalltalk).

assert 
    this value ifFalse: [AssertionFailure signal: 'Assertion failed'] 

und damit als in

[ value notNil ] assert. 
[ value > 0 ] assert. 
[ list isEmpty not ] assert. 

so weiter verwenden.

+0

Warum nicht eine Methode auf Booleans? '(Wert> 0) sicherlich. Ich denke, weil der Test eine Nicht-Boolean oder eine Ausnahme erzeugen könnte, obwohl es nicht wie die Smalltalk-Art scheint, sich viel darum zu sorgen. –