2014-09-28 3 views
1

프로젝트에서 mvc5 및 Entity Framework 6을 사용했습니다. 내 프로젝트에 MSTest을 사용하기로 결정했지만 몇 가지 질문이 있습니다.MVC 단위 테스트

예를 들어 나는이 클래스 인스턴스 회사, 조직, 사용자을위한 프로젝트의 다른 클래스에 몇 가지 의존성을 가지고, 내가 직원라는 클래스가 있습니다. 에있는 작업에 대한 테스트 메서드를 만들려면 직원, 사용자, 회사 및 조직에 대한 개체를 만들어야 만하는 테스트 메서드에서 현재 사용자, 회사 및 조직에 대한 직원의 의견을 반환하는 직원 컨트롤러을 테스트 해 볼 수 있습니다. 동작.

테스트 용 모든 개체를 만들고 싶다면 각 테스트 메서드마다 많은 개체를 만들어야합니다.이 작업은 매우 시간이 많이 걸립니다. 또한 프로젝트의 다른 개체에 더 많은 종속성을 가진 복잡한 개체가 있습니다.

이 경우 연구가 있었지만 일부 사람들은 테스트 목적으로 특정 데이터가 포함 된 데이터베이스를 만들 것을 권장했지만 데이터베이스에 사용되지 않은 모든 단위 테스트의 원칙 중 하나는 알고 있어야합니다. 기억에 남을 수 있어야한다.

모의 수업을 원하는 경우 시간 소비가 많아 오류 가능성이 높습니다.

이 상황에서 테스트하기 가장 좋은 방법은 무엇입니까? 단위 테스트는 좋은 선택입니까?

웹에서 가장 일반적인 예는 전화 번호 형식에 대한 쓰기 단위 테스트 또는 적절한 샘플을 찾을 수있는 곳입니까?

답변

0

귀하의 질문에 대한 세부 사항으로는 단위 테스트뿐만 아니라 실제로 전체 테스트 프로세스가 설정되어야한다고 말할 수 있습니다. 내 대답은 너무 광범위 할 것이다, 그래서 나는 제안이 부부로로 요약하려고합니다 :

  • 적절한 테스트 활동을 얻기 위해, 당신은 필요 테스트 환경 (하나 이상)
  • 단위 테스트는 이고 수행해야하는 (테스트) 레벨 중 하나 인입니다. 아시다시피 Unit testing은 모두 입니다. 응용 프로그램의 테스트 가능한 가장 작은 부분은 더 이상입니다. 복잡한 오브젝트 생성, 사용법 등을 다룰 필요가 있다면 test level을 고려해야합니다. 예를 들어, 통합 테스팅은 애플리케이션의 결합 된 부분을 도와주고 제대로 작동하는지 확인하는 데 도움이됩니다. 많은 경우에

    모의까지의 모든 클래스

    을 가진 부분에 대해

성능을 향상시킬 수 있습니다 심지어 방법을 사용하고 불가피하다.당신의 적절한 조합에 의해

클래스 I는 조롱 테스트 객체를 사용하고 캐시 다른 클래스 예를 들어

몇 가지 의존성을 가지고, 그래서 다른 테스트 실행에 재사용 할 수 있습니다. 매우 유용한 것은 Flyweight-design-pattern입니다.

년 전 나는 그런 프로젝트 (ASP 닷넷, 엔티티 프레임 워크 등)과

이 상황에서 테스트하는 가장 좋은 방법은 무엇인가에 대한 답으로 일해야했다?

Test process을 설정하면 소프트웨어 안정성에 도움이됩니다.

3

컨트롤러를 저장소 클래스로 테스트하는 것은 혼란스러운 일이라고 생각합니다.

컨트롤러에 단위 테스트를 수행하려면 먼저 종속성 삽입을 사용하여 "느슨하게 결합 된"서비스에 대한 종속성을 만들어야합니다.

이제 모든 Employee 관련 객체를로드하는 것은 컨트롤러가 아니라 저장소 서비스의 책임입니다. 따라서 컨트롤러 테스트에서 테스트하지 않아야합니다.

컨트롤러가 작업을 수행하는 데 필요한 속성 만 가진 객체를 반환하는 가짜 저장소로 저장소 서비스를 조롱해야합니다. 그런 다음 컨트롤러 테스트에서이 데이터로 수행해야하는 작업을 확인해야합니다. 물론 여러 가지 유형의 데이터에 대해 서로 다른 동작을 테스트하여 동일한 동작에 대해 여러 가지 테스트를 수행 할 수 있습니다.

저장소 테스트는 완전히 다른 작업입니다. 이것은 실제로 테스트하기 위해 실제 데이터베이스가 필요하기 때문에 더 어렵습니다. 상황에 따라 다르지만 일부 테스트가 시작될 때마다 일부 기본 데이터로 채워지거나 (스키마가 변경되면 다시 생성되는) "테스트 데이터베이스"가 사용됩니다.

한편 리포지토리 서비스 책임은 데이터베이스에서 클래스를로드하는 것이므로 다른 서비스에 대한 종속성이 필요하지 않으므로 해당 테스트는 결코 조롱을 사용하지 않습니다.

+0

정확히 내가 말했듯이, 당신이 말했듯이, 저장소를 테스트하고 싶습니다.하지만 데이터베이스를 사용한다면, 단위 테스트의 이점을 잃을 것입니다. –

관련 문제