자바로 실용적인 테스팅: 나는 TDD를 하지 않아

우리는 구글 포토스 클론을 만들고 있고, 테스트는 정말 어렵습니다!

우리의 자바 앱이 올바른 ImageMagick 프로세스를 생성하는지, 결과 썸네일이 올바른 크기이며 실제로 썸네일이지 아니면 고양이 사진인지 어떻게 테스트할까요? 다양한 ImageMagick 버전과 운영 체제를 어떻게 테스트할까요?

비디오에 무엇이 있나요

00:00 인트로

비디오는 우리의 구글 포토스 클론 테스트가 어떻게 까다로운지에 대한 개요로 시작합니다. 지난 에피소드와 마찬가지로 이미지에서 썸네일을 추출하기 시작했지만, 이제 그것을 테스트하는 방법이 필요합니다. 이는 외부 ImageMagick 프로세스를 통해 수행되기 때문에, 우리는 흥미로운 여정을 시작합니다.

01:05 JUnit 설정 및 첫 번째 테스트 메서드 작성

먼저, JUnit 5를 설정할 것입니다. 스프링 부트와 같은 프레임워크를 사용하지 않기 때문에, JUnit으로 작동하기 위해 필요한 최소한의 라이브러리와 구성을 추가하는 것은 좋은 연습이 됩니다. 또한, 기존 코드를 테스트하는 방법에 대해 생각하며 테스트 메서드 명명 등을 주의해서 몇 가지 테스트 메서드 스켈레톤을 작성할 것입니다.

04:19 ImageMagick 버전 감지 구현

지난 에피소드에서 우리는 다른 시스템에서 자바 앱을 실행할 때 예기치 않은 결과나 순전히 오류가 발생하는 것을 발견했습니다. 이는 다른 ImageMagick 버전이 우리가 호출해야 하는 다양한 API 세트를 제공하기 때문입니다. 따라서 설치된 ImageMagick 버전을 감지하고 또한 ImageMagick이 실제로 설치되어 있는지 확인하는 테스트 방법을 추가해야 합니다. 전에 어떤 테스트를 실행하기 전에.

10:32 테스팅 트레이드오프 

ImageMagick 버전을 감지하는 것과 같이 실제 문제는 다양한 운영 체제와 설치된 ImageMagick 버전으로 100% 테스트 커버리지를 달성하려면 매우 복잡한 CI/CD 설정이 필요하다는 것입니다. 이 프로젝트의 범위에는 없습니다. 그래서 우리는 우리 접근 방식의 장단점에 대해 논의하고 있습니다.

12:00 @EnabledIfImageMagickIsInstalled 구현

그러나 우리가 할 수 있는 것은 ImageMagick이 설치되어 있는 경우에만 나머지 테스트 스위트를 실행하도록 확인하는 것입니다. 따라서 ImageMagick이 설치되어 있는지 여부를 확인하는 사용자 지정 JUnit 5 주석인 EnabledIfImageMagickIsInstalled를 작성합니다. 이 주석은 테스트 메서드 또는 전체 클래스에 추가하여 해당 동작을 활성화할 수 있습니다. ImageMagick이 설치되어 있지 않으면 테스트가 실행되지 않고 못생긴 오류 메시지를 표시하는 대신 실행되지 않습니다.

16:05 성공적인 썸네일 생성 테스팅

가장 큰 문제는 어떻게 썸네일이 제대로 생성되었는지 제대로 확인하는 것입니다. 이 질문에 대해 우리는 ImageMagick의 종료 코드를 테스트하고, 파일 크기를 추정하며, 이미지를 로드하고, 올바른 양의 픽셀을 갖는지 확인함으로써 접근할 것입니다. 이 모든 작업은 AssertJ와 그 소프트어설레이션의 도움을 받아 여러 어설션을 하나로 쉽게 결합할 수 있습니다.

23:59 여전히 내 기계에서만 작동합니다 

전체 워크플로를 테스트한 후에도 다른 ImageMagick API를 호출하여 다른 버전을 확인해야 합니다. IM6과 IM7을 지원하기 위해 빠르게 그 동작을 추가할 수 있으며, 이제 끝났습니다.

25:53 배포

이제 애플리케이션을 내 NAS에 배포할 시간입니다. 이번에는 모든 것이 예상대로 작동합니다!

26:20 최종 테스팅 생각

이번 에피소드에서 상당한 테스팅을 진행했습니다. 우리가 배운 모든 도전과 실용적인 테스팅 전략을 요약해 봅시다.

27:31 다음 주제

에피소드를 마무리하며 다음 주제를 살펴보겠습니다: 멀티스레딩 문제!

다음 에피소드에서 뵙겠습니다.

Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java