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
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
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']
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
Tout simplement faire cela signale que "Matrix ne comprend pas #assert:". – Tordek
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 –
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
ainsi que self assert: [... certains bloc]
fonctionne pour les blocs & non-blocs, car l'envoi de #value à Object renvoie self.
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.
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. –
Pourquoi ne recommanderiez-vous pas la version GNU? – Eyvind
Manque de soutien - squeak a une communauté plus impliquée, et Squeak est plus amusant. –
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. –