내 프로젝트에서 TDD를 연습하기 시작했습니다. 백그라운드로 레거시 코드도 포함되어 있습니다. Mockito를 조롱 프레임 워크로 사용하고 Spring MVC 접근법을 따른다.단위 테스트 및 너무 많은 모델 번호
많은 다른 DAO
개체로 구현 된 Service
클래스가 @Autowired
속성으로 구현되는 경우가 있습니다. 이러한 서비스에는 간단한 방법이 있습니다 (예 : completeTransaction
).
completeTransaction
는 책임
- 업데이트를 완료
DAO
객체의 많은 사용에
그러나 다른 보류중인 작업 닫기 거래
DAO
에 대한 호출을 통해 t를 가져오고 업데이트해야합니다. 비즈니스 프로세스 ID를 가져오고, 보류중인 트랜잭션을 가져오고 (해당 업데이트를 저장합니다). 이것은이 메소드를 테스트하는 단위가 많은 @Mock
속성을 추가하게 함을 의미합니다. 그리고 테스트가 실제로 어떤 조건을 테스트하기 전에 끝나기 전에 mock 객체를 설정해야합니다. 이것은 코드 냄새와 같아서 테스트는 계약서 대신 코드의 구현을 보장하는 것처럼 느껴집니다. 다시 말하지만, 종속성을 조롱하지 않고도 테스트 케이스가 실행되지 않습니다 (NPE 및 다른 이유로 인해).
내가 이와 같이 코드를 정리할 수있는 전략은 무엇인가? (나는 정말로 질문에 실제 소스 코드를 제공 할 수 없다). 나는 하나의 가능성이 ("getPendingOperations"와 "advanceBusinessProcess"와 같은) 메소드로 facade 클래스를 설정하는 것이라고 생각하고있다. 그런 다음 하나의 의존성을 조롱 할 수 있습니다. 그러나 다음과 같은 상황을 가지고있는 다른 모든 수업에서는 똑같이해야한다고 생각합니다. 그런 다음 더 깨끗한 시험을 위해서 많은 "도우미"수업을 마치는 것이 두려워요.
고맙습니다.
이 코드를 본 개발자가 없다고 생각합니다. 레거시 코드에서는 전체 흐름을 테스트하기 위해 테스트를 작성하므로 DAO를 모의하고 서비스 및 구성 요소를 허용하는 컨트롤러 수준에서 테스트를 작성합니다. 그들이하는 것을 의미하는 것을하기 위해서 ... –