2009-08-04 6 views
2

내 사용자 모델에 ChangePassword 메소드가 있다고 가정 해 보겠습니다. 이미 초기화 된 사용자 모델을 감안할 때 새로운 암호를 매개 변수로 사용하고 데이터베이스가 마법을 수행하도록 작동합니다. 이 프론트 엔드는 사용자가 현재 비밀번호와 원하는 새 비밀번호를 입력하는 웹 양식입니다. 그런 다음 컨트롤러는 사용자의 현재 암호가 올바른지 확인합니다. 그렇다면 사용자 모델의 ChangePassword 메소드를 호출합니다. 그렇지 않은 경우, 사용자에게 오류를 표시합니다.단위 테스트는 어느 수준에서해야합니까?

가능한 한 가장 작은 코드를 단위 테스트해야한다고 들었지만이 경우 사용자가 정확한 현재 암호를 입력했는지 확인하는 것을 완전히 무시합니다. 그래서 내가 무엇을해야하니?

내가해야 : 전용 컨트롤러에서

A) 단위 테스트는, 효과적으로 너무 모델 기능을 시험하기?

또는

B) 두 가지 테스트를 만듭니다. 하나는 컨트롤러 용이고 다른 하나는 모델 용입니까?

답변

4

의심 스럽다면 둘 다 테스트하십시오. 컨트롤러 만 테스트하고 테스트가 실패하면 문제가 컨트롤러 또는 모델에 있는지 여부를 알 수 없습니다. 두 가지를 모두 테스트하면 모델의 테스트 결과를보고 문제가있는 곳을 알 수 있습니다. 통과하면 컨트롤러에 오류가 발생하고 오류가 발생하면 모델에 오류가 발생합니다.

+0

의심 할 여지없이 정치적으로 정확하려면 모든 것을 테스트하십시오. 아무도 모든 것을 테스트 할 시간이 없으므로 시간 내에 테스트 할 수있는 모든 것을 테스트하고 실패 가능성을 결정하거나 마침내 테스트 할 대상에 대한 코드 메트릭을 쉽게 결정할 수 있습니다. –

0

가) 하나 이상의 클래스 (또는 레이어)를 사용하므로 제 의견으로는 단위 테스트가 아닙니다. 따라서 모델을 실제로 단위 테스트해야합니다.

+1

여전히 테스트해야합니다. 단위 테스트 대신 통합 테스트가됩니다. –

+0

그것은 * unit * 테스트가 아닐 수도 있지만, 여전히 장점이있는 테스트입니다. –

+0

컨트롤러에 단위 테스트를하지 말아야한다는 말씀입니까? 사용자의 원래 비밀번호가 잘못되었을 때 어떻게 실패 할 수 있는지 어떻게 알 수 있습니까? – ryeguy

2

A)

  • 테스트가 실패합니다. 모델 또는 컨트롤러 또는 둘 모두에 문제가있어 모델 및 컨트롤러를 검색하는 데 시간을 소비합니다.

B)

  • 모델과 컨트롤러 테스트가 실패 ... 기회는 당신이 모델에 문제가 있습니다.
  • 컨트롤러 테스트 만 실패 ... 컨트롤러에서 문제가 모델에없는 것이 더 좋습니다.
  • 모델 테스트만으로는 실패합니다 ... 이런 일이 발생하기는 어렵지만, 문제가 발생하면 컨트롤러에있는 것이 아니라 모델에 문제가 있음을 알 수 있습니다.

두 레이어를 테스트하는 것이 좋습니다. 나중에 문제를 쉽게 찾을 수 있습니다.

+0

"모델 테스트만으로는 실패합니다 ... 이런 일이 일어나는 것을보기는 힘들지만 문제가 발생하면 컨트롤러에있는 것이 아니라 모델에 문제가 있다는 것을 알게됩니다." - 또는 테스트 중 하나에 문제가 있습니다. ;) – Amber

+0

불행히도, 매우 사실 Dav. – digitaljoel

1

여기에 여러 테스트가 있어야한다 :

  • 올바른 암호를 입력하고 확인합니다.
  • 새 비밀번호의 유효성을 검사합니다 (예 : 기존의 것과 일치하지 않으며 최소 길이, 충분한 복잡성, 발생한 오류 테스트 등
  • 데이터베이스를 새 암호로 업데이트합니다.

테스트가 의미있는 코드 문서로 작동하여 코드의 각 부분이 무엇인지 명확하게 알 수 있도록 도와줍니다.

1

다른 옵션을 고려해 볼 수 있습니다 : Mock objects. 이를 사용하면 모델없이 컨트롤러를 테스트 할 수 있으므로 테스트 실행 속도가 빨라지고 테스트 견고성이 향상 될 수 있습니다 (모델에 오류가 발생하면 컨트롤러가 계속 작동 함을 알 수 있습니다). 이제 두 가지 적절한 단위 테스트 (하나의 코드 만 테스트)와 필요한 경우 통합 테스트를 추가 할 수 있습니다.

+0

프론트 엔드와 백엔드가 함께 작동하는 방식에 따라 모의 객체가 필요하지 않습니다. 때로는 유닛 및 통합 테스트에서 필요하지만 자체 테스트 방법은 필요하지 않습니다. –

+0

그래서 결과가 두 가지 단위 테스트라고 썼습니다. 난 그냥 당신이 실제로 모델을 테스트하지 않고 컨트롤러를 테스트 할 수 있다는 것을 지적하는 것이 유용 할 것이라고 생각했습니다. 컨트롤러가 모델에 의존하는 경우에는 자체적으로 단위 테스트를 실행하는 방법을 알지 못합니다. –

0

단위 테스트는 모든 단위를 자체적으로 테스트한다는 것을 의미하므로이 경우 프론트 엔드와 백엔드에 각각 하나씩 두 개의 단위 테스트를 작성해야합니다.

두 통합 테스트를 모두 테스트하려면 최소한 ITSQB가이를 호출해야합니다.

객체 지향 코드는 일반적으로 테스트 할 수있는 가장 작은 독립 단위 인 모든 클래스에 대해 단위 테스트를 작성합니다.

관련 문제