그래서 얼마 전에 작성한 인증 모듈이 있습니다. 이제 나는 길의 오류를보고 그것을 위해 단위 테스트를 작성하고 있습니다. 단위 테스트를 작성하는 동안 좋은 이름과 테스트하기 좋은 영역을 찾기가 어렵습니다. 예를 들어 다음과 같은 것이 있습니다
- Login_should_redirect_when_not_logged_in 필요
- Login_should_pass_through_when_logged_in 필요
- Login_should_work_when_given_proper_credentials
개인적으로, 나는 그것이 "적절한"것처럼 보이지만 조금 추악하다고 생각합니다. 또한 스캔을 통해 테스트를 구별하는 데 어려움이 있습니다 (방금 실패한 것을 알기 위해 메소드 이름을 두 번 이상 읽어야합니다)
따라서 기능을 순전히 테스트하는 테스트를 작성하는 대신 시나리오를 다루는 일련의 테스트를 작성해야한다고 생각했습니다.
예를 들어, 이것은 내가 생각해 낸 테스트 스텁입니다.
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
이 패턴에 대해 들었습니까? 나는 수용 이야기 등을 보았지만 이것은 근본적으로 다릅니다. 가장 큰 차이점은 테스트를 "강제"하는 시나리오를 제시한다는 것입니다. 테스트해야 할 가능한 상호 작용을 수동으로 시도하는 대신. 또한 이것이 정확히 하나의 메소드와 클래스를 테스트하지 않는 단위 테스트를 권장한다는 것을 알고 있습니다. 그래도 괜찮습니다. 또한 테스트가 서로 독립적이며 순서가 중요하지 않다고 가정하기 때문에 적어도 일부 테스트 프레임 워크에서 문제가 발생할 수 있음을 알고 있습니다 (이 경우의 위치).
어쨌든, 이것은 전혀 권장되는 패턴입니까? 아니면 이것이 "단위"테스트가 아닌 내 API의 통합 테스트에 완벽하게 맞습니까? 이것은 개인 프로젝트에 불과하기 때문에 잘 진행될 수도 있고 그렇지 않을 수도있는 실험에 개방적입니다.
_test
추가하고 주석을 사용하여 내가 기대하는 결과를 기록합니다. 개인적인 프로젝트라면 편안하다고 느끼는 스타일을 찾아 내십시오.