>

저는 약 1 년의 경험을 가진 C # winforms 개발자입니다. 내가 지금까지 해왔 던 유일한 단위 테스트는 수동이었습니다. 언젠가는 다음에 대해 생각하고 있습니다 :

  • 자동화 된 장치가 필요한 이유 테스트? 얼마나 효과적입니까?
  • 자동화를 시작하려면 단위 테스트. 어디서부터 시작해야합니까 에서? (nunit에 대해 들었습니다)
  • 기억해야 할 것이 있습니까? 수업을 디자인 할 때 자동 단위 테스트를 용이하게 하시겠습니까?
  • C #에 대한 기본 제공 지원이 있습니까? 자동 단위 테스트?
  • 자동으로 GUI를 테스트 할 수 있습니까? 단위 테스트 또는 사업인가 논리?
  • 모의 프레임 워크에 대해 들었습니다. 또한 단위 테스트에도 사용됩니까?

  • 답변 # 1

    자동 단위 테스트가 필요한 이유는 무엇입니까? 얼마나 효과적입니까?

    자동화 단위 테스트는 자동화 할 수 있기 때문에 가장 중요합니다. 일반적으로 자동화가 가능할 때만 '단위 테스트'로 간주합니다. 응용 프로그램의 크기가 커짐에 따라 전체 응용 프로그램을 수동으로 테스트하는 데 몇 시간 또는 몇 주가 걸릴 수 있습니다. 응용 프로그램의 작은 부분 만 테스트하더라도 시간이 걸리고 오류가 발생하기 쉽습니다. 자폐증이 아닌 한 수십 번 이상 반복해야하는 경우 각 수동 테스트를 100 % 올바르게 수행하는 데 집중할 수 없습니다.

    민첩한 개발에서 우리는 빠른 피드백 개념을 사용합니다. 옳고 그른 것에 대한 피드백을 빨리받을수록 더 효과적 일 수 있습니다. 우리 모두는 실수를 저 지르지 만, 며칠 또는 몇 주 후보다 30 초 후에 실수를 발견하고 고치는 것이 훨씬 저렴합니다. 이것이 바로 자동화 된 테스트가 중요한 이유입니다.

    다양한 수준에서 자동 테스트를 수행 할 수 있지만 단위 테스트는 가장 효율적인 구현 유형입니다. 이해하고 숙달하는 것이 가장 어려운 시험 분야 일 수 있지만 다른 유형의 시험보다 훨씬 강력합니다.

    자동 단위 테스트를 시작하려면 어디서부터 시작해야합니까? (nunit에 대해 들었습니다)

    먼저, 몇 가지 단위 테스트 기본 사항을 배워야합니다. Roy Osherove의 책 The Art of Unit Testing은 좋은 소개입니다.

    프레임 워크와 관련하여 NUnit은 오랫동안 사용되어 왔지만 몇 가지 고유 한 문제가 있습니다.

    Visual Studio Professional 또는 Team System이 이미있는 경우 MSTest라고하는 기본 제공 단위 테스트 프레임 워크가 있습니다. 대부분의 사람들은이 프레임 워크를 싫어하지만 개인적으로는 꽤 적절합니다. IDE 통합은 잘 작동하지만 API가 더 나을 수 있습니다.

    무료 오픈 소스 단위 테스트 프레임 워크를 찾고 있다면 훨씬 더 현대적인 프레임 워크 인 xUnit.net을 추천합니다.

    자동 단위 테스트를 용이하게하기 위해 클래스를 디자인 할 때 염두에 두어야 할 사항이 있습니까?

    예, 각 클래스는 개별적으로 사용할 수 있어야합니다. 이는 초기 설계 나 기존 코드에 단위 테스트를 개조하려는 경우에는 매우 어려울 수 있지만 TDD (Test-Driven Development)를 채택하면 자연스럽게 발생합니다.

    C #은 자동화 된 단위 테스트를 기본적으로 지원합니까?

    아니요, C #은 언어 일 뿐이지 만 위에서 언급 한 것처럼 Visual Studio의 특정 버전에는 MSTest가 있습니다.

    자동 단위 테스트로 GUI를 테스트 할 수 있습니까? 아니면 비즈니스 로직일까요?

    단위 테스트 GUI는 매우 부서지기 쉬우므로 (즉, 테스트 유지 관리가 매우 높음) 일반적으로 좋은 생각이 아닙니다.

    그러나 모든 GUI 로직을 테스트 가능 클래스로 추출 할 수있는 많은 디자인 패턴이 있습니다 : Modev-View-Controller, Model-View-Presenter, Application Controller, Model-View-ViewModel 등.

    GUI 렌더링 부분 만 무시하고 이러한 인터페이스를 통해 전체 응용 프로그램의 자동화 된 테스트를 수행 할 수 있습니다. 이러한 테스트를 피하 테스트라고하지만 단위 테스트가 아닌 통합 테스트로 간주합니다.

    모의 프레임 워크에 대해 들었습니다. 또한 단위 테스트에도 사용됩니까?

    동적 모의 라이브러리는 유닛 테스트를 위해입니다.

    일부 좋고 인기있는 사람들은

    Moq

    Rhino Mocks

  • 답변 # 2

    자동화 된 장치가 필요한 이유 테스트? 얼마나 효과적입니까?

    프로그램의 일부를 분리하여 "정확한"것으로 표시합니다. 코드 실행 방법에 대한 계약이라면 계약입니다. 이를 통해 코드가 올바르게 작동하는지 신속하고 자주 알 수 있습니다.

    단위 테스트를 통해 프로그래머는 자신감을 갖고 부작용을 줄이면서 코드를보다 쉽게 ​​변경할 수 있습니다. 단위 테스트없이 위험 할 수있는 코드 리팩토링을 촉진/활성화합니다. 이 모든 것을 염두에두고 단위 테스트를 통해 코드를 개선 할 수 있습니다.

    나는 그것들이 효과적이라고 생각하지만 이것이 학습 곡선의 일부라는 것을 인정할 것이다. 당신이 정말 잘 될 때까지 (그리고 나는 여전히 초심자입니다) 당신은 종종 물건을 놓칠 것입니다. 그러나 나는 그것이 너무 오랫동안 수행 한 수동 테스트보다 여전히 낫다는 것을 알았습니다. 단위 테스트에서 거의 즉각적인 이점을 발견했습니다. 그것으로 첫 번째 프로젝트에서 나는 거의 수동으로 테스트 할 필요가 없기 때문에 많은 시간을 절약하고 있음을 발견했으며 실제로 작업중 인 코드가 테스트를 다른 곳에서 실패했을 때 실제로 두 번 이상 즐겁게 놀랐습니다. 나는 수동으로 다시 테스트 할 생각조차하지 않았습니다.

    자동화를 시작하려면 단위 테스트. 어디서부터 시작해야합니까 에서? (nunit에 대해 들었습니다)

    Nunit은 좋고 MbUnit은 좋다. 시작하려면 측정 값을 읽고 연습하십시오. 단위 테스트, 테스트 중심 개발 (TDD) 및 리팩토링에 대한 웹 사이트 및 블로그. Object Mentor는 TDD에 대한 훌륭한 시리즈를 가지고 있습니다. 그런 다음 어느 시점에서 가지고있는 코드를 골라 시도해보십시오.

    제안한 책-예를 들어 테스트 주도 개발, 테스트 주도 개발, 실용 가이드, 단위 테스트 기술, 리팩토링 (마틴 파울러), 리팩토링 통합 문서, 패턴 리팩토링, 코드 정리 및 기타 사항이 있다고 확신합니다. .

    단위 테스트를 통해 손을 리팩터링하는 기술을 찾았 기 때문에 목록에 리팩토링 책이 있습니다.

    기억해야 할 것이 있습니까? 수업을 디자인 할 때 자동 단위 테스트를 용이하게 하시겠습니까?

    내가 언급 한 많은 책들이 이에 대해 논의 할 것입니다. 대답은 '예'입니다. 의존성이 적은 더 나은 클래스는 테스트하기가 더 쉽습니다. 이것은 좋은 디자인이지만 테스트를 더 쉽게 만듭니다. 코드를 좀 더 테스트 가능하도록 변경해야하는지에 대해서는 약간의 논쟁이 있습니다. 나는 너에게 기대어. 이 시점에서 과거의 내 코드에는 많은 "좋은 디자인"아이디어가 포함되지 않았으므로이 TDD 여정에 착수하기 위해 코드에서 좋은 디자인 수준에 대한 인식과 수준을 높이고 자합니다. TDD를하십시오.

    C #에 대한 기본 제공 지원이 있습니까? 자동 단위 테스트?

    VS 2008 Pro, 예 또는 팀 시스템이 있지만 당연히 그렇지 않다고 가정합니다.

    자동으로 GUI를 테스트 할 수 있습니까? 단위 테스트 또는 사업인가 논리?

    예, 몇 가지 도구가 있습니다. Watin은 떠오르는 것입니다.

    모의 프레임 워크에 대해 들었습니다. 또한 단위 테스트에도 사용됩니까?

    예. 이를 통해 단위 테스트를 쉽게 수행 할 수없는 매우 복잡한 객체를 시뮬레이션/테스트 할 수 있습니다.

    TDD 경로를 향한 여정에서 처음에는 조롱을 의도적으로 무시했습니다. 저에게는 왜 그들이 필요한지, 그리고 그것이없는 생활을 통해 어떻게 사용되는지, 그리고 전통적인 TDD 기술에 얽매이는 곳을 코딩하면서 나 자신을 보길 원했습니다.

    내가 읽는 데 뇌가 아프지 만, 내가 많이 사용하는 다른 책은 레거시 코드로 효과적으로 작업하는 것입니다. 그것은 훈련되지 않은 사람에게 무해한 것처럼 보이는 코드가 어떻게 인생을 정말로 힘들게 만들 수 있는지 보여줍니다.

  • 답변 # 3

    포인트 1) 작동하는 것과 그렇지 않은 것에 대한 지속적인 개요를 제공합니다. 간단한 기능을 변경하자마자이 변경으로 인해 문제가 발생하면 결과가 나타납니다. 또한 나중에 전체 응용 프로그램을 리팩토링하고 단위 테스트가 모두 녹색으로 진행되는 한 모든 것이 잘 작동합니다. 바로이 시점이 매우 중요합니다. 아니면 리팩토링 할 필요가없는 프로젝트를 수행 한 적이 있습니까?

    포인트 2) NUnit은 시작하기에 좋은 곳이지만 다른 여러 단위 테스트 프레임 워크가 있습니다. 또한 CruiseControl 또는 개발자의 많은 작업을 수행하는 기타 지속적인 통합 도구를 살펴 보는 것이 좋습니다.

    포인트 3) 물론, 몇 시간과 몇 시간을해야 할 것과하지 말아야 할 것을 말할 수있는 사람들이 있습니다. 단위 테스트 배경이 임베디드 장치에 사용하도록 제한되어있는 한 다른 특징이 있습니다.

    포인트 4) C #은 테스트 프레임 워크가 아닌 프로그래밍 언어입니다. .Net에는 단위 테스트 중에 도움이되는 하나 이상의 속성, 즉 내부 클래스와 메소드를 하나의 고유 한 유형에 대해 공개하도록하는 InternalsVisibleTo-Attribute가 있습니다.

    포인트 5) 잘 설계된 응용 프로그램이 있다면 GUI를 테스트 할 필요가 없습니다. 이것에 대해 생각해보십시오. 귀하의 코드에는 코드가 없습니다. 사용자가 누를 수있는 모든 버튼은 컨트롤러에 매핑됩니다. 사용자가 제공 할 수있는 모든 입력은 컨트롤러에 전달됩니다. 그렇다면 GUI에서 무엇을 테스트해야합니까? 컨트롤러를 테스트하고 제대로 작동시키기 만하면됩니다. 이 MVVM/MVC/WhatElseArchitecture를 사용하면 한 손에는 잘 설계된 응용 프로그램이 있고 다른 한편으로는 테스트하기 쉬운 응용 프로그램이 있습니다.

  • 답변 # 4

    자동화 된 장치가 필요한 이유 테스트? 얼마나 효과적입니까?

    아주.

    자동화를 시작하려면 단위 테스트. 어디서부터 시작해야합니까 에서? (nunit에 대해 들었습니다) nunit으로 시작-매우 쉬움

    기억해야 할 것이 있습니까? 수업을 디자인 할 때 자동화 된 단위 테스트를 용이하게 하시겠습니까? 단위 테스트에 능숙하다면 원할 것입니다.

    C #은 기본적으로 지원됩니다 자동화 된 단위 테스트? 아니요-하지만 Visual Studio는 사용하지만 사용하지 않는 것이 좋습니다

    자동으로 GUI를 테스트 할 수 있습니까? 단위 테스트 또는 사업인가 논리? 얼마나 힘든지에 대한 의문의 여지가있는 것은 무엇이든 자동화 할 수 있습니다.

    모의 프레임 워크에 대해 들었습니다. 또한 단위 테스트에도 사용됩니까? 예.

    Roy Osherove의 단위 테스트 기술을 읽어보십시오.

  • 답변 # 5

    자동 단위 테스트의 이유는 간단합니다. 코드가 커짐에 따라 수동 테스트를 수행하는 데 시간이 오래 걸리므로 점점 줄어 듭니다.

    테스트를 자동화하면 편리하게 테스트를 실행할 수 있습니다.

  • 이전 python - 자바 스크립트의 플라스크 url_for URL
  • 다음 javascript - jquery 버튼 클릭 이벤트가 시작되지 않음