문제

나는 현재 무거운 레일 테스트습니다.그것은 나는 아무 것도 얻을 수 있습에 대한 특정 사항에 대해,그러나 실행시간에 대한 전체 스위트(단위/기능의 일부/통합)실행할 수 있습의 위쪽으로 5 분.

우리는 완전히에 의존 설비하고 있는지를 조롱하며 떨어집니까이 많은 우리처럼 해야 합니다.

우리는 다음 몇 스프린트는 것에 집중하고 테스트,두 개선 적용,작문 더 나은 테스트와 가장 중요한 것은 쓰는 더 효율적으로 테스트합니다.

그래서 옆에서 조롱과 스텁에서 우리의 테스트,우리는 교체하는 방안을 검토리기구와 가장 가능성이 공장이 여자입니다.나는 많은 행복한 사람이 하는 유사한 상황을 제공하지 않습니를 찾을 수있는 좋은 자원에 어떤 장단점을 이동하는 공장입니다.본 일부는 느린 벤치마크를 사용할 때 벤치마크에서 다양한 자원이지만을 찾을 수 없는 결정적인 이유 공장 좋은 이유를 사용하지 않을 수도 있습니다.

할 수 있는 사람이 교육에 나에게 그 이유는 무엇 나는 사용하지 않아야 공장?

감사합니다!

도움이 되었습니까?

해결책

이 있을 수도 있습 문제를 설정하는 모든 간의 종속성 엔티티에 대한 좋은 테스트습니다.어쨌든,그것은 여전히는 것보다 훨씬 쉽 maintaing 많이 있습니다.

구:

  • 을 유지하기 위해 열심히 관계를(특히 다);
  • 테스트 스위트 런타임은 일반적으로 느릴 때문에 더 DB 타;
  • 테스트는 변화에 매우 민감합니다.

공장:

  • 당신은 스텁지 않아 모든 것을 테스트에서는 현재 단위 테스트
  • 을 준비하는 엔티티는 당신 테스트와 함께 공장이 있습니다.이것은 공장의 진짜 이점을 설정하는 새로운 테스트 사례로,당신은하지 않을 유지하기 위해 필요 톤의 YAML-파일에 대한;
  • 당신은에 집중 테스트입니다.경 테스트에 필요한 변경을 시나리오,당신은하지 않는 이동 당신의 사고 방식이다.으로 긴 스텁은 합리적 및 공장 쉽게 주문을 받아서,당신은 잘해야합니다.

그래서,공장 보일 좋은 방법입니다.가능한 유일한 단점을 보다:

  • 소요되는 시간을에서 마이그레이션기구;
  • 을 유지하는 제 정신이 설정한 시나리오를 요구할 수 있습니다 어떤 노력이다.

다른 팁

올레그의 대답은 훌륭하지만, 둘 다 사용하는 사람의 관점을 제시하겠습니다.

비품은 일종의 Rails 커뮤니티의 채찍질 소년이었습니다. 모든 사람은 비품의 단점을 이해하지만 아무도 자신의 강점을 옹호하는 사람은 없습니다. 내 경험에 따르면, 공장 자체는 조명기만큼 쉽게 유지하기가 어려워 질 수 있습니다 (실제로 스키마에 따라 다르지만 나는 멍청합니다). 공장의 실제 강점은 고정 기반 통증을 선택적으로 대체하는 것입니다. 몇 가지 세부 사항에 대해 이야기합시다.

첫 번째 문제는 성능입니다. 데이터베이스에 도달하지 않고 대부분의 앱을 테스트 할 수 있다면 상당한 속도가 높아지지 만 대부분의 응용 프로그램에서는 데이터베이스를 완전히 누르지 않고 테스트하는 것이 현명하다고 생각하지 않습니다. 어느 시점에서 전체 스택을 테스트하려고합니다. 조롱하거나 스터브 할 때마다 미묘한 버그가 포함될 수있는 인터페이스에 대해 가정합니다. 따라서 몇 가지 상당한 비율의 테스트, 트랜잭션 조정에 대해 데이터베이스를 칠 필요가 있다고 가정합니다. ~이다 트랜잭션 비품을 올바르게 사용하면 모든 테스트마다 전체 환경을 인스턴스화하는 것보다 훨씬 빠를 수 있습니다.

나는 당신이 정말로 당신이 정말로 바라봐야 할 테스트 스위트의 크기로 지속적인 통합 개발을 다음 단계로 확장합니다. 아무리 속도를 높이더라도 여전히 개발자가 기다리는 데 오랜 시간이 걸립니다. 어쩌면 볼 수도 있습니다 자동 테스트 개별 수준에서 도움을 줄 수 있습니다. 그러나 궁극적으로 CI는 개발자 민첩성을 희생하지 않고 테스트 징계를 유지할 수 있습니다.

비품이 실제로 빛나는 곳은 기능적/통합 테스트 중입니다. 내가 보는 방식은 비품이 앱을 테스트 할 수있는 건강한 기본 상태를 설정해야한다는 것입니다. 대부분의 단위 테스트에는 실제로 필요하지 않습니다. 공장을 사용하여 매우 좋은 단위 범위를 얻을 수 있습니다. 그러나 기능 테스트와 관련하여 주어진 페이지가 수십 개의 모델에 도달 할 수 있습니다. 각 테스트에서 모든 것을 설정하고 싶지 않습니다. 더 복잡한 시나리오를 구성함에 따라 글로벌 데이터 상태를 재현하는 데 점점 더 가까워지고 있습니다. 바로 그거죠 처음에 어떤 비품이 설계되었는지.

내가 보유하고있는 논란의 여지가있는 한 가지 믿음은 다른 모든 것이 평등하다는 것입니다. 나는 20 개의 단위 테스트 (Rails Parlance 사용)에 하나의 기능 테스트를 선호합니다. 왜요? 기능 테스트는 사용자에게 전송 된 최종 결과가 정확하다는 것을 증명하기 때문입니다. 단위 테스트는 기능의 미묘한 영향을 미치는 데 좋지만 하루가 끝나면 전체 사이트를 깨뜨리는 인터페이스를 따라 버그를 가질 수 있습니다. 기능 테스트는 실제로 내 브라우저에 페이지를로드하지 않고 배포를 치는 신뢰를 제공합니다. 나는 모든 것을 스텁하고 두 인터페이스를 테스트하고 동일한 범위를 얻을 수 있다는 것을 알고 있지만, 약간의 CPU를 희생하여 한 번의 간단한 테스트에서 전체 스택을 테스트 할 수 있다면, 그렇게 할 것입니다.

그렇다면 비품에 대한 모범 사례는 무엇입니까?

  • 가장 광범위한 데이터 범주를 다루기 위해 모든 모델에 대해 소수를 설정
  • 많은 모델과 컨트롤러에 걸쳐 자르는 주요 새로운 기능을 추가 할 때 주요 상태를 나타내는 새로운 비품을 추가하십시오.
  • 필드 추가/제거를 제외하고 오래된 비품 편집을 피하십시오.
  • 더 작거나 더 현지화 된 변형에 공장을 사용하십시오
  • 페이지 매김 또는 몇 가지 테스트에만 필요한 기타 대량 생성을 테스트하기 위해 공장을 사용하십시오.

또한 추천하겠습니다 Jay Fields의 블로그 정말 좋은 실용적인 테스트 조언을 위해. Jay의 블로그에 대해 내가 가장 좋아하는 것은 항상 테스트가 프로젝트별로 매우 적합하다는 것을 인정하고 한 프로젝트에 효과가있는 것이 반드시 다른 프로젝트에 효과적 일 필요는 없다는 것입니다. 그는 교리가 부족하고 실용주의가 길다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top