올렉의 대답은 훌륭하지만 두 가지를 모두 사용하는 사람의 관점을 제시하겠습니다.
고정물은 Rails 커뮤니티의 채찍질 소년이었습니다. 모든 사람들은 조명기의 단점을 이해하지만 아무도 자신의 강점을 실제로 옹호하지 못합니다. 필자의 경험으로 볼 때, 공장 자체는 설비와 마찬가지로 유지하기가 어려울 수 있습니다 (실제로 스키마에 따라 다름).공장의 진정한 힘은 고정물 기반 통증을 선택적으로 대체하는 것입니다. 몇 가지 구체적인 내용에 대해 이야기 해 봅시다.
첫 번째 문제는 성능입니다. 데이터베이스를 치지 않고 대부분의 앱을 테스트 할 수 있다면 상당한 속도 향상을 볼 수 있지만 대부분의 애플리케이션에서 데이터베이스를 전부 사용하지 않고 테스트하는 것이 현명한 방법이라고 생각하지 않습니다. 어떤 시점에서 전체 스택을 테스트하려고합니다. 조롱하거나 스텁 할 때마다 미묘한 버그가 포함될 수있는 인터페이스에 대한 가정을하고 있습니다. 따라서 상당 수의 테스트에서 데이터베이스를 조회해야한다고 가정하면 트랜잭션 픽스쳐 (은입니다)는 모든 테스트에 대해 전체 환경을 인스턴스화하는 것보다 훨씬 빠를 수 있습니다.
여러분의 개발 스위트의 크기가 실질적으로 다음 단계로 발전하기 위해 Continuous Integration을 바라 볼 필요가 있습니다. 아무리 속도를 높이더라도 개발자가 기다리는 데는 오랜 시간이 걸립니다. 어쩌면 autotest을 보시고 개별 레벨에서 도움을 받으십시오. 그러나 궁극적으로 CI는 개발자의 민첩성을 희생하지 않으면서도 테스트 규율을 유지할 수 있도록 해줄 것입니다.
조명기가 실제로 빛나는 곳은 기능/통합 테스트입니다. 필자가 보는 방법은 테스트를 위해 앱이 건강한 기본 상태를 설정해야한다는 것입니다. 대부분의 단위 테스트는 실제로 이것을 필요로하지 않습니다. 공장을 이용하면 아주 좋은 단위 적용 범위를 얻을 수 있습니다. 그러나 기능 테스트에서 특정 페이지가 수십 개의 모델에 영향을 미칠 수 있습니다. 나는 각 테스트마다 그 모든 것들을 설정하고 싶지 않습니다. 더욱 복잡한 시나리오를 만들면서, 나는 세계 데이터 상태를 다시 만드는 데 더 가까워지고있다. 정확히 처음에 어떤 조명기가 디자인 되었는가?
나는 다른 모든 것이 평등하다는 논쟁의 여지가있는 믿음은 레일 테스트를 사용하여 20 단위 테스트를 한 가지 기능 테스트보다 선호합니다. 왜? 기능 테스트는 사용자에게 전송 된 최종 결과가 정확함을 증명하기 때문입니다. 단위 테스트는 기능의 미묘한 차이에 영향을 미치지 만, 결국에는 전체 사이트를 파괴하는 인터페이스에 버그가있을 수 있습니다. 기능 테스트는 브라우저에서 실제로 페이지를로드하지 않고도 배포를 수행 할 수 있다는 확신을줍니다. 나는 모든 것을 스텁 (stub)하고 양쪽 인터페이스를 테스트하고 동일한 적용 범위를 얻을 수 있다는 것을 알고 있습니다.하지만 작은 CPU를 희생하여 하나의 간단한 테스트에서 전체 스택을 테스트 할 수 있다면 훨씬 더 좋을 것입니다.
그럼 조명기에 대한 최선의 방법은 무엇입니까? 모든 모델은 데이터의 광범위한 범주를 포함하는
- 는 소수를 설정
- 많은 모델과 컨트롤러를 초월 주요 새로운 기능을 추가 할 때, 주요 국가에게
- 피를 표현하기 위해 몇 가지 새로운 설비를 추가 단지 몇 가지 검사에 필요한 시험 매김 또는 기타 대량 생성을 위해 더 작은/더 지역화 변동/제거 필드를
- 사용 공장을
- 를 사용하여 공장을 추가 제외 된 비품을 편집
또한 실용적인 테스트 조언을 위해 Jay Fields' blog을 권하고 싶습니다. 제가 제이의 블로그에 대해 가장 좋아하는 점은 테스트가 프로젝트마다 매우 다르다는 것, 그리고 한 프로젝트에서 작동하는 것이 다른 프로젝트에서 반드시 작동하지 않는다는 것입니다. 그는 교리에 대해 짧고 실용주의로 길다.
출처
2009-04-20 18:30:56
gtd