2013-07-30 3 views
2

Je suis extrêmement novice en matière de développement axé sur le comportement, et j'essaie de comprendre quelque chose de fondamental: la différence entre les systèmes de test et les systèmes de spécifications.Utiliser les systèmes de test par rapport aux systèmes de spécification

J'ai été jusqu'à présent en utilisant la bibliothèque minitest/test sur Ruby où un test unitaire typique ressemblerait à quelque chose comme ceci:

require "minitest/test" 

class TestMeme < Minitest::Test 
def test_that_kitty_can_eat 
    assert_equal "OHAI!", @meme.i_can_has_cheezburger? 
end 
end 

D'autre part, une spécification de minitest/spécification regarderait quelque chose comme ceci:

require "minitest/autorun" 

describe Meme do 
describe "when asked about cheeseburgers" do 
    it "must respond positively" do 
    @meme.i_can_has_cheezburger?.must_equal "OHAI!" 
    end 
end 
end 

Alors, quelle est exactement la différence entre les tests et les spécifications? Dois-je choisir, ou puis-je utiliser les deux?

Répondre

3

Ce que vous montrez est simplement le style des tests. Vous pouvez utiliser l'API minitest pour créer des tests, ou vous pouvez utiliser la spécification DSL pour créer les tests. Comme vous le soulignez, ils sont fonctionnellement équivalents. La différence est une question de préférence.

La plus grande question est TDD vs. BDD. Les deux préconisent de conduire la conception de votre logiciel en écrivant des tests. D'abord vous écrivez un test qui échoue, puis vous écrivez seulement le code nécessaire pour le faire passer, puis vous refactorisez votre code pour le rendre correct tout en laissant passer vos tests. C'est ce qu'on appelle le cycle TDD. BDD va un peu plus loin et spécifie comment les développeurs peuvent interagir avec les utilisateurs pour définir les histoires sur lesquelles travaillent les développeurs. Et il préconise un rôle différent pour les simulacres que la plupart des praticiens TDD utilisent. Mais ce sont de petites différences par rapport à la très grande zone que les deux méthodologies sont d'accord.

Vous pouvez vous entraîner à TDD avec des tests de type spec et vous pouvez pratiquer BDD avec des tests de style test. Vous pouvez mélanger et faire correspondre, avec des blocs de style describe et it avec des assertions assert_* ou des définitions de classe de style de test et de méthode avec les attentes must_*. Les différences entre la syntaxe de style de test et la syntaxe de style de spécification sont superficielles.

1

Le test BDD est un test unitaire convivial pour les analystes d'entreprise, tandis qu'un test unitaire est simplement adapté aux développeurs. BDD définit un langage pour interagir entre les développeurs et les BA.

Idéalement, BA pourrait produire une documentation exécutable orientée vers l'humain mais automatiquement exécutable, bien intégrée avec agile, formatée en tant que User Stories.

Je pense que vous avez juste besoin de lire plus sur BDD, wiki a un bon article.