나는 단시간에 단위 테스트를 사용했지만, 파서, 수학, 복잡한 비즈니스 로직을 수행하는 등 상당한 양의 논리를 실제로 수행하는 클래스/메소드에만 유용하다고 생각하기 시작했습니다. 모든 좋은 후보자들 테스트를 위해, 의문의 여지가 없습니다. 다른 클래스의 객체 (대개 위임을 통해 작동하는 객체)에 대한 테스트를 사용하는 방법을 알아 내려고 정말 고심하고 있습니다.대부분 서비스 지향적 인 앱에 대한 유용한 단위 테스트를 작성하려면 어떻게해야합니까?
사례 : 현재 프로젝트는 많은 데이터베이스와 서비스를 조정합니다. 대부분의 클래스는 서비스 메소드의 모음이며, 대부분의 메소드는 몇 가지 기본 조건부 로직을 수행합니다 (for-each 루프). 그런 다음 다른 서비스를 호출합니다.
이와 같은 객체를 사용하면 모의 테스트가 실제로 실행 가능한 유일한 전략이기 때문에 필자는 그 중 일부에 대한 모의 작업을 충실히 수행했습니다. 그리고 정말, 정말 다음과 같은 이유로, 그것을 좋아하지 않아 :
- 행동이 내가 클래스 구현을 변경할 때마다 일을 중단하게 대한 기대를 지정하는 모의 객체를 사용하여, 변화의 종류가 아닌 경우에도 것과 해야지 단위 테스트에 차이를 만들어라. 내 생각에 단위 테스트는 "메소드가 A, B, C를 순서대로 수행해야 할 필요가 없다"라고 명시하지 않고 기능을 테스트해야합니다. 나는 시험이 마음에 든다. 왜냐하면 무언가가 깨지면 내가 알 수있는 자신감으로 물건을 바꿀 수 있기 때문에 자유롭기 때문이다. 그러나 mock은 엉덩이를 바꿀만큼 고통 스럽다.
- 의도 된 동작이 간단하다면 mock을 쓰는 것이 종종 클래스를 작성하는 것보다 더 효과적입니다.
- 내 테스트에서 모든 서비스와 구성 요소 개체의 완전히 다른 구현을 사용하기 때문에 결국 모든 내 테스트가 실제로 동작의 가장 기본적인 골격이라고 확인합니다. "if"및 "for"문 여전히 작동합니다. 지루한. 나는 그것들에 대해 걱정하지 않는다.
내 응용 프로그램의 핵심은 모든 조각이 함께 작동, 그래서 (그들은 분명 적절한있어 장소를 제외하고) 모두 단위 테스트를 죽겠다 대신 외부 통합 테스트로 이동 을 고려하고 어떻게 정말 - 열심히 가능성이 적은 케이스를 설정하고 적용 할 수는 있지만 실제로는 실행하는 것이므로 시스템을 실제로 연습하십시오.
모의 객체 사용이 실제로 유용하지 않은 경우는 없습니다.
생각하십니까?
"나는 모의 객체를 사용하여 실제로 유용 어떤 경우를 확인할 수 없습니다." 그것은 아마도 너무 강한 성명서 일 것입니다. 특정 (좁은) 경우에는 조롱이 도움이되지 않습니다. 그러나 모의에 관한 담요 진술은 당신이 제시 한 증거에 대해 다소 강할 수 있습니다. 그것이 당신의 결론이라고 확신합니까? –
글쎄, 물론 그것은 내 경험 범위와 내가 겪은 이슈들에 걸쳐있다. 나는 아무도 그 (것)들에게서 이득을 파생하지 않는다는 것을 가장하지 않는다.그러나 많은 다른 프로젝트에서 많은 개발 작업을 해본 결과 내가 사용하고 싶지 않은 곳을 보지 못했기 때문에 예제가 궁금합니다. 하지만 이해가 안되기 때문에 틀렸어. 만약 그렇다면 누군가가 나에게 도전하기를 바란다. – levand