9

서로 다른 프로그래밍 언어를 사용하는 웹 개발자가 서로 다른 의견을 공유하는 경우가 많습니다. 예를 들어 Rails가 지배적 인 프레임 워크 인 Ruby 웹 개발자는 제어기를 접착제 코드로 생각하는 것처럼 보입니다. 접착제 코드는 기능 테스트가 있어야하지만 단위 테스트는 필요하지 않습니다. 비슷한 태도가 PHP 세계에서 지배적이지만 어떤 시도 (예 : Symfony2)가있었습니다.MVC 웹 응용 프로그램의 컨트롤러를 단위 테스트 할 수 있습니까?

그러나 실제로는 일부 ASP.NET MVC 개발자가 실제로 want their controllersto be unit-testable 인 것으로 보입니다.

웹 개발에서 실제로 작동하는지 알고 싶습니다. 컨트롤러가 단위 테스트에 가치가 있습니까? 중요하지 않은 응용 프로그램에서 단위 테스트가 가능하도록 설계하는 것이 개발 속도를 현저하게 저하 시키는가? 또한 모든 웹 프레임 워크에서 컨트롤러 유닛 테스트 가능성을 강화하려고합니까? 개인적인 경험을 환영합니다.

답변

2

모든 것이 단위 테스트를 거쳐야합니다. 이 경우 컨트롤러의 로직이 얼마나 실현되는지에 따라 달라집니다. 소규모 프로젝트에서는 외부 로직을 연결할 필요가 없으며 컨트롤러에서 일부 데이터베이스 작업 (예 : 많은 Microsoft 예제)을 만들 수 있습니다. . 더 큰 솔루션에서는 지정된 비즈니스 로직 메소드를 호출하는 것만 큼 컨트롤러를 테스트 할 필요가 없을 수도 있습니다 ... 컨트롤러가 유닛 테스트를받을 가치가 있는지 여부는 포함되지 않은 코드에 관한 것입니다.

4

짧은 대답 : "예"와 함께 "대답"긴 대답 : "아니오"와 "하지만."

요즘 나는 오이와 함께 모델 및 비즈니스 오브젝트와 기능 테스트 범위의 강력한 단위 테스트 적용 범위를 선호하여 컨트롤러 수준 단위 테스트를 놓치는 경향이 있습니다. 컨트롤러는 대다수의 비즈니스 로직을 캡슐화하는 기본 모델에 데이터를 라우팅하는 매우 가벼운 객체입니다.

그러나 컨트롤러 수준에서 일부 제어 흐름에 대해 매우 가볍게 적용되는 경향이 있습니다. 그것은 단지 온전한 체크의 경향이 있습니다.

컨트롤러 수준 테스트의 문제점 중 하나는 효과적으로 테스트하기 위해 많은 수의 모델과 개체를 조롱하거나 생성해야하는 경우입니다. 이를 감안할 때 테스트 스타일을 사용하면 이러한 종속성을보다 효율적으로 표현할 수있는 기능 계층으로 이러한 테스트를 밀어 넣는 것이 더 중요하다는 것을 알게되었습니다 (응용 프로그램 자체를 통해 또는 시스템을 통해 생성하는 단계를 명시 적으로 수행하여 오이의 선언적 규칙).

0

MVC 패턴의 가장 좋은 기능 중 하나는 컨트롤러가 뷰에서 HTML 출력을 격리하여 테스트 할 수 있다는 것입니다. 로직을 HTML 출력과 섞은 페이지는 테스트하기가 어렵습니다. 이것은 MVC가 해결하는 문제 중 하나입니다. 컨트롤러가 로직에 관한 것이고 HTML을 전혀 파싱하지 않고 테스트 할 수 있습니다.

이상적으로 컨트롤러는 별도의 데이터 액세스 클래스에서 데이터를 가져와 테스트를 마칠 수 있으므로 논리를 테스트하는 것입니다. 본질적으로 MVC가보기와 분리 된 것과 같은 방식으로 컨트롤러를 데이터베이스에서 분리합니다. 그러면 테스트 데이터가있는 데이터베이스가 필요 없기 때문에 테스트가 쉽습니다.

관련 문제