Drupal에서 TDD (Test Driven Development)를 수행하는 방법은 무엇입니까?


30
  • Drupal (PHP 모듈, Drupal 모듈 등)에서 TDD에 사용 된 도구는 무엇입니까?
  • 커밋 / 테스트 / 배치 워크 플로는 어떤 모양입니까? 이 워크 플로우를 관리하기 위해 Phing, PHPUnderControl, Hudson을 사용하십니까?
  • 어떤 방법으로 단위 테스트를 통해 코드를보다 안정적으로 만들 수 있습니까?
  • 별도의 고가의 독립형 단위 테스트 서버가 필요합니까, 아니면 랩톱에서 할 수 있습니까?

Robert는 Drupal의 SimpleTest를 사용한 단위 테스트에 대한 훌륭한 기술 게시물을 여기 에 썼습니다 . 워크 플로 및 구성 부분을 다루는 데 더 관심이 있습니다. 현재 개발 머신, 스테이징 및 프로덕션 서버가 있습니다. 프로덕션 사이트와 스테이지 사이트는 모두 300MB RAM / 300MHz CPU Dreamhost VPS에서 실행됩니다.

답변:


8

루비 세계에서 TDD는 프레임 워크에 내장 된 도구로 촉진됩니다. Factory Girl, Mocha, rSpec 등을 통해 개발자는 필요한 테스트 사례를 해결하는 쉽고 역동적 인 테스트를 만들 수 있습니다.

Drupal의 TDD 도구가 부족하여 좌절했습니다. 그들과의 가장 큰 문제는 단일 테스트를 실행하는 데 걸리는 시간입니다. 각 반복마다 60-90 초가 걸리는 개별 테스트로 개발주기를 늦출 수 없습니다. 테스트를 전혀 작성하지 않으려면 전체 테스트 스위트가 여러 시간 동안 실행됩니다.

테스트가 실행될 때마다 전체 DB를 복사하는 것과 관련이 있다고 생각하지만, DrupalWebTestCase를 사용해야하는 경우 가까운 미래에 내가 말할 수있는 것에서 변경되지는 않습니다.

Drupal을 수동으로 부트 스트랩 하는 Phactory 와 phpunit을 사용하여 솔루션을 해킹 하고 있습니다. 분명히 몇 가지 문제가 발생하여 끝내지 못했지만 아직 끝나고 있습니다.

다행히도 대부분의 작업은 백엔드 레이어에 있으므로 DRUPAL_BOOTSTRAP_DATABASE 수준을 유지할 수 있습니다. 그러나 전체 스택이 필요한 더 많은 상황에 처해 있습니다.

결국 Drupal의 TDD는 잘 지원되지 않으므로 Drupal 테스트 프레임 워크 외부에서 작동하도록 자체 작성하거나 성능 저하를 견딜 수 있습니다.

-업데이트-

Drupal과 Phactory의 완전한 통합을 성공적으로 설정했으며 이제 Drupal Web Test Case 대신 phpunit을 통해 테스트를 실행하고 있습니다. 가능합니다.

나는 그것을 릴리스 할 수 있고 Phactory doc에 통합 될 수있는 시점에 도달하기를 바랍니다.

-업데이트 2-

Phactory 설정 방법에 대한 문서는 https://github.com/trimbletodd/phactory에 있습니다.


당신의 기여에 감사드립니다. 단위 테스트를 위해 Phactory에서 무슨 일이 일어나고 있는지 매우 흥미 롭습니다. Drupal 모듈이 요리 해 왔음을 기대합니다.)
아마추어 바리 스타

나는 포크에 Drupal에서 Phactory를 어떻게 다루고 있는지에 대한 간단한 문서를 작성했다. 마스터에게 풀 요청을 제출했지만 아직 통합되지 않았습니다. github.com/trimbletodd/phactory
trimbletodd

이 질문과 답변은 여전히 ​​오늘날까지 계속되고 있습니다. 당신은 자신의 포크 / 솔루션을 굴리기 위해 흔들립니다. 따라서 귀하는 합격 답변을받습니다.
아마추어 바리 스타

12

Mark의 블로그가 오프라인 상태이므로 팀에서 구현 한 도구 중 일부에 대해 언급하겠습니다.

기능 테스트 : Selenium
단위 테스트 : Simpletest
빌드 서버 : Jenkins
성능 벤치마킹 : XDebug + Cachegrind

이 질문을한지 2 년 만에 일부 추가 도구가 TDD 장면에서 인기를 얻는 것을 보았습니다. 오늘날 드루팔 (Drupal) 환경에서 Test Driven Development에 관해 이야기 할 때, 같은 코인에는 프론트 엔드 테스트와 백엔드 테스트라는 두 가지 측면이 있습니다.

이 문제를 나타내는 최신 Drupalcon Portland 2013에서 눈에 띄는 두 가지 프레젠테이션이 있습니다.

백엔드 테스트에 의한 개발 .
Jasmine 및 PhantomJS를 사용한 자동화 된 테스트 , 프론트 엔드 테스트.

첫 번째 프레젠테이션은 단위 또는 기능 테스트 (엄격히 말해서)와 관련이 없으며 코드 품질을 측정하는 도구에 대한 것입니다. 그럼에도 불구하고 주제와 관련이 있다고 생각합니다.


1
와우! 2 년 후 다시 찾아 주셔서 감사합니다. You rock :)
Chapabu 2016 년

5

내가 아는 유일한 것은 기여 모듈의 경우 이슈 큐에서 커밋 패치 의 자동 테스트를 활성화 할 수 있다는 것입니다 ( http://drupal.org/node/689990 참조) . 특히 의존성이있는 경우 여전히 불안정합니다.

대부분의 프로젝트는 버그 중심 개발 라인을 따라 더 많은 작업을 수행 할 것입니다. 기본적으로 버그가 발견되면 테스트를 작성한 다음 수정합니다. 전혀 그렇지 않으면;)

개인적인 경험으로 볼 때, TDD는 Drupal에서 다소 어려움을 겪습니다. 단순 테스트로 단위 테스트를 작성하지 않고 페이지를보고 양식을 제출하는 통합 테스트를 작성하기 때문입니다. 따라서 좋은 테스트를 미리 작성하기는 다소 어려울 수 있습니다. 하지만 어쩌면 나는 그렇게하는 데 익숙하지 않습니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.