TDD가 아닌 BDD: 결과 지향 테스팅
TDD가 클릭되지 않습니다. 해결 방법을 알려주세요.
이전에 TDD(Test Driven Development)와 앱의 로직 대신 프레임워크를 테스트하는 방법에 대해 이야기한 적이 있습니다.
이전 항목을 읽지 않은 경우 여기에서 찾을 수 있습니다.
구조에 대한 BDD(행동 주도 개발)
이번에는 무슨 일이 있어도 테스트를 하기로 결정했기 때문에 모의, 페이크, 인터페이스, 종속성 주입에 중점을 두지 않는 접근 방식을 선택했지만 결과를 확인하는 것이 전부이며 BDD의 목적은 다음과 같습니다. 행동.
내가 해봤어?
예, 저는 이 게시물을 작성하는 것을 허락하지 않았습니다.
)이 기숙사 관리 시스템(학생은 방 검색/예약, 매니저는 예약 승인/거부 및 기숙사 관리)를 완료했습니다.
다음은 전체 프로젝트입니다. "features"폴더에는 테스트가 포함되어 있습니다. https://github.com/coretabs/dorm-portal
자유롭게 홍보하거나 문제를 만드세요.
재미있는 사실
나는 약간 복잡한 필터링 엔진(multiCheckbox/singleCheckbox/integer 필터링 기준이 있는 곳)에서 작업했고, BDD로 약 1주일 만에 완료했습니다... 모든 테스트가 녹색, 우후!
전체 프로젝트가 약 2달만에 끝났고... 올그린 😉
어떻게 BDD를 할 수 있습니까?
정말 간단합니다.
1. 합격 기준 작성(시나리오)
일반적인 방법은 작은 오이(Gherkin) 언어를 사용하는 것입니다. 정말 직관적이므로 두려워하지 마세요. 이 샘플을 살펴보세요(자체 설명이 필요함).
Feature: Reservation
Scenario: As a student
I want to make reservations
So that I get a room to stay in
Given we have 2 dormitories (and 1 room each available to reserve)
Given two students who reserved nothing
When create a reservation
Then quota of the room should decrease
2. 단계 구현
선택한 언어/프레임워크에 따라 다를 수 있습니다. 저는 django(물론 파이썬과 함께)를 사용하고 있으며, behavior-django 패키지를 사용하는 좋은 방법이 있습니다.
위에서 언급한 수락 기준은 다음과 같습니다.
from behave import given, when, then
from api.engine.models import RoomCharacteristics
from features.steps.factory import (create_alfam_dovec_with_4_rooms,
create_student,
create_reservation)
@given('we have 2 dormitories (and 1 room each available to reserve)')
def arrange(context):
create_alfam_dovec_with_4_rooms(context)
@given('two students who reserved nothing')
def arrange(context):
context.user1 = create_student(context, 'Owen')
context.user2 = create_student(context, 'Tia')
@when('create a reservation')
def act(context):
context.previous_quota = context.room1.allowed_quota
context.reservation1 = create_reservation(context.room1, context.user1)
@then('quota of the room should decrease')
def test(context):
context.room1 = RoomCharacteristics.objects.get(pk=context.room1.id)
assert context.room1.allowed_quota == context.previous_quota - 1
3. 녹색으로 만들기
이제 실제 코드를 작성하는 부분이 오고 목표는 해당 할당량 테스트를 통과하는 것입니다.
from django.db import (models as django_models, transaction)
from .exceptions import NoEnoughQuotaException
class Dormitory(django_models.Model):
name = django_models.CharField(max_length=60)
class RoomCharacteristics(django_models.Model):
allowed_quota = django_models.PositiveIntegerField(default=0)
dormitory = django_models.ForeignKey(
Dormitory, related_name='room_characteristics', on_delete=django_models.CASCADE)
def decrease_quota(self):
if self.allowed_quota == 0:
raise NoEnoughQuotaException()
self.allowed_quota -= 1
class Reservation(django_models.Model):
user = django_models.ForeignKey(
User, related_name='reservations', on_delete=django_models.CASCADE)
room_characteristics = django_models.ForeignKey(
RoomCharacteristics, related_name='reservations', on_delete=django_models.CASCADE)
@classmethod
def create(cls, *args, **kwargs):
room_characteristics = kwargs['room_characteristics']
result = cls(*args, **kwargs)
with transaction.atomic():
room_characteristics.decrease_quota()
result.save()
room_characteristics.save()
return result
진지하게?! 지루하게 들린다!
아니! 기능을 추가하거나 간단한 것 하나를 변경하면 프로젝트의 다른 많은 부분이 손상될 수 있는 다른 프로젝트에서 일했기 때문에 저를 믿으세요. 문자 그대로 다음과 같이 됩니다.
이미지 출처: 지피
X 기능을 추가하고 고객이 "등록이 작동하지 않습니다"라고 외치면 알게 될 것입니다.
언제 BDD와 TDD를 해야 합니까?
참조
Reference
이 문제에 관하여(TDD가 아닌 BDD: 결과 지향 테스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yaser/bdd-rather-than-tdd-result-oriented-testing-3n67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)