2009-08-11 7 views
1

제목이 분명하지 않을 수 있습니다. 다음의 예를 염두에 두어야합니다.BDD/TDD에서의 행동 결과 표현 방법

Authenticator 객체는 자격 증명을 사용하여 사용자를 인증합니다. AuthResult 객체를 반환합니다. 이 AuthResult 객체는 인증 성공 또는 실패한 경우 (실패한 경우 사용자 이름을 찾을 수없는 경우 등) 실패했습니다.

테스트에서 어떻게 표현할 수 있습니까? 'testShouldReturnAuthObjectWithStatusSuccessOnValidLogin'?

답변

5

testValidLoginIsSuccessful 또는 testIsSuccessfulOnValidLogin 나를 위해 충분히 좋은 것 같다.

오류 테스트의 경우, 당신은 메소드 이름에 구현 세부 사항을 가하고 피해야한다 testGetsCustomMessageOnUserNotFound

같은 것을 사용할 수 있습니다.

+0

하자 이 인증자는 특정 작업 (예 : 데이터베이스에 연결)을 수행하기 위해 지정된 책임이있는 다른 클래스를 사용한다고 말합니다. 이러한 클래스에 대한 테스트를 작성하면 '전체 인증 패키지'에 대한 구현 세부 정보를 제공하겠습니까? – koen

+0

아니요, 방금 메서드 이름에 대해 이야기하고 있습니다. 그리고 단위 테스트를 원할 경우 다른 클래스를 조롱해야합니다. 그런 다음 다른 클래스를 개별적으로 테스트하여 격리되어 작동하는지 확인하십시오. –

+0

'complete-authentication-package'는 통합 테스트입니다. 이러한 클래스가 잘 연결되어 있고 프로세스가 전체적으로 작동하는지 테스트합니다. 이 경우, 그 이름이 구현에만 국한되지 않는 것이 더 좋습니다. –

2

이러한 테스트가 어떻게 구현되는지 보지 않고서는 관측치가 너무 많다고 명명 된 것 같습니다.

이 테스트에 실패하면 (a) AuthResult 객체가 반환되지 않았거나 (b) 상태가 "성공"이 아니며 또한 AuthResult가 없었기 때문에 파기해야합니다. 인증 기가 데이터베이스에 연결되지 않았거나 다른 필요한 조치를 취하지 않았기 때문에?

나는 고정 When_told_to_authenticate_with_valid_credentials 이름을 다음 두 가지 관찰에 주장을 분리하는 것입니다 : 당신은 사무엘이 바르게 제안, 당신은 더 할 수있는 그 다른 클래스를 조롱하는 경우
1 should_return_an_AuthResult
2 should_be_successful

인증자가 예상대로 작동하는지 규정 :
3. should_connect_to_the_database
4.

+0

should_return_an_AuthResult 구현 세부 사항이 아닙니까? – koen

+0

예, 구현 세부 사항입니다. 나는 구현 세부 사항이 TEST 메서드의 이름에 포함되어서는 안된다는 전제에 동의하지 않는다. 왜냐하면 (1) 정확하게 구현과 관련된 것이고 (주보다는) 동작에 집중할 때 테스트하고 있기 때문이다. (2) 따라서 메소드 이름은 통과 또는 실패를 정확히 반영해야하며 (3) 테스트 어셈블리는 게시되거나 배치되지 않습니다. – Jay

+0

1 점에 동의하지 않습니다. 내 테스트에서 내 방법이 올바르게 작동하는 것으로 확인되면 구현이 무엇인지는 신경 쓰지 않습니다. 내 테스트가 구현에 대한 가정을 만든다면 나중에 구현을 리팩터링하기로 결정하면 테스트를 중단 할 수 있습니다. – JeffH