TimeProviderInterface 인터페이스는 덕 타이핑의 오리가 어떻게 생겼는지 보여 주는 좋은 예시다. 이제 이 인터페이스를 갖고 테스트를 만들 수 있다. 테스트 코드는 예제 3-13의 테스트와 비슷하게 생겼지만 큰 차이점이 있다. 바로 컴파일러가 함수 시그니처를 제대로 작성했는지 확인해 준다는 점이다.
다음 예제에서 FakeTimeProvider 구현부를 참고해 보자.
// stub-time/03-ts-inject-interface/password-verifier-time03.spec.ts
class FakeTimeProvider implements TimeProviderInterface {
fakeDay: number;
getDay(): number {
return this.fakeDay;
}
}
다음 예제는 테스트 코드에 해당한다.
describe('password verifier with interfaces', () => {
test('on weekends, throws exceptions', () => {
const stubTimeProvider = new FakeTimeProvider();
stubTimeProvider.fakeDay = SUNDAY;
const verifier = new PasswordVerifier([], stubTimeProvider);