2009-03-20 6 views
2

tryng certains Smalltalk + TDD + « bonnes pratiques » J'ai couru dans un bloc un peu laid:Smalltalk et Assertions

Comment puis-je faire une assertion dans GNU Smalltalk?

Je cherche juste pour un simple ifFalse: [Die] genre de chose

Répondre

2

Voici le code pour assert: de Squeak (que je vous recommande d'utiliser plutôt que GNU):

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

Pourquoi ne recommanderiez-vous pas la version GNU? – Eyvind

+0

Manque de soutien - squeak a une communauté plus impliquée, et Squeak est plus amusant. –

+0

Plus de soutien vient de plus de gens qui l'utilisent. Et GNU Smalltalk évolue bien. Il y a quelques personnes derrière, avec Paolo Bonzini comme force principale. –

0

Il est simple . Dans vos méthodes de test que vous écrivez:

self assert: 1 + 1 = 2 

Mais d'abord, vous devez créer une classe de test en tant que sous-classe de TestCase (en Squeak), par exemple:

TestCase subclass: #MyTest 

Ici vous écrire les méthodes d'essai, qui Les noms doivent toujours commencer par 'test', par exemple:

testBasicArithmetics 

self assert: 1 + 1 = 2 
+0

Tout simplement faire cela signale que "Matrix ne comprend pas #assert:". – Tordek

+0

Oui, vous devez faire une classe de test bien sûr et y mettre des assertions dans les méthodes de test. Voir ma mise à jour –

+1

Désolé, c'était un malentendu: je ne parle pas d'assertions de tests unitaires, mais d'affirmations de conception par contrat. (IE, vérification pré/post-condition dans la méthode.) – Tordek

2

ainsi que self assert: [... certains bloc]

fonctionne pour les blocs & non-blocs, car l'envoi de #value à Object renvoie self.

0

Il a été suggéré ci-dessus pour ajouter #assert:-Object, mais je voudrais ajouter #assert à BlockClosure (ou quoi que [] class est dans GNU Smalltalk).

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

et donc utiliser comme dans

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

etcetera.

+0

Pourquoi pas une méthode sur les booléens? '(value> 0) sûrement. 'Je suppose que le test pourrait produire un non-booléen ou une exception, bien que cela ne semble pas être le cas pour Smalltalk. –

Questions connexes