컨트롤러에 대한 단위 테스트를 작성하는 이유는 무엇입니까? _IConstituencyServiceMock =

나에게 이것은 완전히 관련이없는 단위 테스트이며 누군가가 왜 그것을 쓸 가치가 거의 없기 때문에 그것을 작성하는 데 시간을 소비했는지 이해하지 못합니다. 이 컨트롤러가 브라우저에서 메소드를 실행하여 원하는 유형을 반환하면 완벽하게 알 수 있습니다. 실제로, 당신은 이것에 대한 시험이 필요하다고 생각합니까?

public class ConstituencyControllerTests
{
    private ConstituencyController _constituencyController;
    private Mock<IConstituencyService> _IConstituencyServiceMock;

    public ConstituencyControllerTests() {
        _IConstituencyServiceMock = new Mock<IConstituencyService>();
    }

    [Test]
    public async Task I_Check_For_Return_Type_And_Result() {
        _constituencyController = new ConstituencyController( _IConstituencyServiceMock.Object );

        var result = await _constituencyController.Get();
        var content = ( (dynamic)result ).Content;

        Assert.IsEmpty( content );
        Assert.IsInstanceOf( typeof( System.Web.Http.Results.OkNegotiatedContentResult<IEnumerable<ListOfConstituencies>> ), result );
        _IConstituencyServiceMock.Verify( x => x.ListOfConstituencies(), Times.Once() );
    }
}



답변

핵심은 다음과 같습니다.

이 컨트롤러가 브라우저에서 메소드를 실행하여 원하는 유형을 반환하면 완벽하게 알 수 있습니다.

단위 테스팅은 단순한 코드 단위가 아닌 비 회귀 테스트 자동화 에 관한 것입니다. 응용 프로그램에서 항상 단위 테스팅을하고 싶지는 않습니다.

편집 : @anotherdave 의견 추가 :

확장의 용이성에 관한 것입니다. 브라우저에서 하나의 컨트롤러를 테스트해도 괜찮습니다. 컨트롤러 10, 20, 50은 어떻습니까? 테스트를 한 번 작성합니다. 컨트롤러를 교체 할 때 업데이트해야 할 수도 있습니다. 그러나 얼마나 자주 배포합니까? 테스트보다 훨씬 많은 오버 헤드가있을 때마다 수동 점검

@Vladislav의 답변에 대한 대안으로 , 단위 테스트는 모든 것을 절대적으로 과도하게 할 수 있으며 실제로 바람직하지 않습니다. 더 가벼운 것이 필요한 경우 Selenium을 사용하여 더 높은 수준의 비 회귀 테스트를 수행 할 수 있습니다. 물론 단위 테스트보다 적용 범위가 줄어들지 만 단위 테스트를 수행하는 데 시간이 덜 걸리고 더 융통성있는 커버리지를 얻을 수 있습니다.

즉, 모든 것을 단위 테스트하는 경우 간단한 요소를 수정할 때마다 하나 이상의 테스트를 업데이트해야합니다.


답변

컨트롤러에 대한 단위 테스트를 작성하는 이유는 무엇입니까?

컨텍스트를 알지 못하면 이것을 테스트 해야하는지 확실하게 말할 수 없기 때문입니다. 컨트롤러를 테스트해야하는 이유는 다음과 같습니다.

  • 컨트롤러는 복잡한 서비스 배선 로직을 포함 할 수 있으며 오류가 발생하기 쉽습니다. 서비스 자체가 제대로 작동 할 수 있습니다. 테스트하려는 결과이며 어떤 이유로 든 오케스트레이션 계층을 앱에 도입하지 않기로 고려했습니다.
  • 귀하의 컨트롤러에는 응용 프로그램의 전체 비즈니스 로직이 포함되어 있으며 컨트롤러는 실제로 테스트 할 수있는 모든 것입니다 (이상적인 코드베이스로 작업 한 모든 삶을 그런 척하지 마십시오.
  • 당신의 팀은 99 %의 천재와 평균적인 사람들의 1 %로 구성되어 있습니다.

답변

OP에 동의합니다.

컨트롤러의 단위 테스트는 의미가 없습니다. 회귀 테스트를 통해 컨트롤러를 암시 적으로 테스트합니다 (예 : Selenium 사용).

컨트롤러가 사용하는 모든 구성 요소 / 객체를 TDD하고 컨트롤러를 가능한 한 얇게 유지해야합니다. 그런 다음 모든 것이 올바르게 단위 테스트됩니다. 당신이 확신하고 싶은 것은 웹 요청을 수행 할 때 모든 것이 잘 작동한다는 것입니다. 그것은 회귀 테스트입니다.


답변