// 가짜 의존성을 주입한다.
inject({ player: fakePlayer });
// 주입된 의존성을 사용하여 음악을 재생한다.
const result = playMusic('Harry Potter Theme');
expect(result).toBe('Pretending to play Harry Potter Theme');
});
이 테스트는 inject() 함수로 가짜 의존성을 주입하고, playMusic() 함수가 주입된 의존성을 사용하여 음악을 재생하는 기능을 검증한다. fakePlayer 객체를 주입하여 play() 메서드가 가짜로 동작하도록 하고, 그 결과가 기대한 대로 나오는지 확인한다.
두 방식을 간단하게 비교해 보면 다음과 같다.
• 유연성: 포트와 어댑터 아키텍처는 외부 시스템의 변경에 유연하게 대응할 수 있다. 어댑터만 수정하면 되므로 시스템의 다른 부분에는 영향을 주지 않는다. 반면에 모듈 주입 방식은 의존성이 많아질수록 관리가 복잡할 수 있다.
• 테스트 용이성: 포트와 어댑터 아키텍처는 가짜 어댑터를 사용하여 내부 로직을 쉽게 테스트할 수 있다. 모듈 주입 방식도 가짜 의존성을 주입하여 테스트할 수 있지만, 포트와 어댑터 방식만큼 유연하지 않을 수 있다.
• 유지 보수성: 포트와 어댑터 아키텍처는 의존성을 분리함으로써 코드 변경이 다른 부분에 미치는 영향을 최소화할 수 있다. 모듈 주입 방식은 의존성 변경이 많은 부분에 영향을 줄 수 있다.