문제

C# 클래스에서 개인 기능에 대한 단위 테스트는 어디에 있습니까?

an Wikipedia의 기사 제안:

  • 테스트중인 회원과 같은 클래스에 테스트를 작성
  • 부분 클래스 사용

개인적으로,이 방법들 중 어느 것도 적절한 것으로 보이며, 별도의 프로젝트에 단위 테스트를하는 것을 선호합니다.

이것에 대한 생각이 있습니까?

(개인 방법을 전혀 테스트 해야하는지에 대한 상당한 논쟁이 있다는 것을 알고 있습니다. 논쟁의 양쪽을 듣고 싶습니다.)

도움이 되었습니까?

해결책

개인 방법이 반드시 직접 테스트 할 필요는 없습니다. 이러한 개인 방법을 활용하는 공개 방법의 테스트를 기반으로 타당성을 결정할 수 있습니다.

그러나 공개 방법이 테스트를 용이하게하고 모든 합리적인 시나리오를 시뮬레이션하기 위해 공개 방법이 개인 방법에 쉽게 모의 종속성을 주입 할 수 있도록주의해야합니다.

편집하다: 다른 테스트가 어디에 있는지에 대해서는 프로젝트 내에서 별도의 하위 디렉토리를 제안하여 테스트를 처리합니다. PHP 응용 프로그램에 대한 테스트를 작성할 때 테스트 디렉토리 구조가 실제 애플리케이션 디렉토리 구조의 디렉토리 구조와 동일한 프로젝트 루트의 디렉토리. 그것에는 실제 클래스에 대한 테스트 클래스가 있습니다.

프로덕션에 출시 할 때 (또는 PHP와 같은 해석 된 언어의 경우 프로덕션 웹 서버에 테스트 클래스를 배포하지 마십시오).

다른 팁

개인 방법을 테스트하지 마십시오. 단위 테스트는 클래스의 가시적 (공개 및 보호 된) 인터페이스를 테스트하기위한 것입니다. 개인 방법은 구현 세부 사항이며, 이에 대한 단위 테스트는 불필요합니다 (행동은 가시적 방법에 대한 테스트에 의해 암시 적으로 테스트되어야 함), 취성 테스트 (구현 세부 사항이 변경 될 수 있으므로)로 이어지고 리팩토링의 장벽입니다.

단위 테스트가 필요하다고 생각하는 개인 방법이 있다면 다른 클래스의 공개 방법으로 고려해야 할 큰 힌트입니다.

C# 클래스에서 개인 기능에 대한 단위 테스트는 어디에 있습니까?

아무데도 없습니다. 그들은 존재하지 않습니다.

일반적으로 내 단위 테스트는 별도의 프로젝트에 있습니다.

또한 개인적으로 별도의 프로젝트에서 단위 테스트를 좋아합니다. 개인 방법을 단위 테스트하려면 대신 개인 메소드를 내부로 만들 수 있습니다. 그런 다음 내부 메소드를 유닛 테스트에 표시하여 다음을 AssemblyInfo.cs에 추가하여 직접 호출 할 수 있습니다.

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

당신은 당신을 위해 일하는 일을해야합니다. 다음은 저에게 효과가 있습니다.

나의 단위는 수업입니다: 그것이 제가 테스트하려는 것입니다. 방법이 아닙니다. 객체 지향 프로그래밍을하려고 노력하므로 객체에주의를 기울였습니다.

개인 방법을 테스트하려는 유혹을 느끼면 리팩터. 나는 그것과 테스트 사이에 너무 많은 다른 코드가 있기 때문에 개인 메소드를 직접 테스트하고 싶습니다. 개인 방법 자체가 테스트주의가 필요할 정도로 복잡하기 때문입니다. 따라서 일반적으로 수업을 추출하여 해당 개인 방법과 다른 관련 구성원을 새 클래스로 가져갑니다.

내 수업은 꽤 경향이 있습니다 작은. 그들은 읽고 이해하기 쉽습니다. 물론 저의 방법은 매우 작고 이해하기 쉽습니다.

이런 일을하는 방식으로의 전환을하려면 저를 필요로했습니다. 재고 프로그래밍에 관한 많은 나의 가정과 습관. 한때 급진적으로 보였던 것은 이제 평범 해 보입니다.

공개 인터페이스 만 테스트해야하기 때문에 일반적으로 개인 방법을 테스트해서는 안된다는 데 동의합니다.

즉, 개인 방법을 테스트하려는 이유가 있습니다.

  1. TDD를 사용하고 있으며 복잡한 개인 방법을 개발해야합니다. 쓰기 테스트 쓰기 코드 - 테스트주기를 올바른 세분화로 유지하려면 개인 방법에 대한 테스트 방법을 만드는 것이 필요할 수 있습니다.

  2. 다른 사람들이 개인 방법을 수정 해야하는 팀의 일원 일 수 있으며 변경 사항이 문제를 일으키지 않도록 테스트를 원할 수 있습니다.

일부 솔루션 :

  1. 개인 방법을 위임하고 테스트 목적으로 만 사용되는 공개 방법을 선언하십시오. 이것들은 testfoo1, testfoo2 등으로 접두사를 할 수 있습니다.

  2. 내부를 사용하십시오

http://msdn.microsoft.com/en-us/library/7c5ka91b(vs.80).aspx

귀하의 질문 제목과 첫 문장은 다릅니다. :)

테스트를 어디에 두어야하는지 잘 모르겠습니다. 그것은 언어에 의존하고 C#은 내가 익숙한 것이 아니지만 코드의 상당 부분이 개인 방법 내부에 있다고 생각합니다. 그것이 테스트되지 않았다면 불편할 것입니다. 코드 적용 범위는 상당히 떨어질 것입니다.

우리는 Visual Studio에서 개인 액세서를 사용하여 개인 방법을 테스트합니다. 이는 테스트 클래스가 별도의 프로젝트에 살 수 있음을 의미합니다.

그러나 우리는 이들의 수를 실제로 제한하려고 노력합니다.

  • 혼자서 할 수있는 개인 방법은 다른 클래스에서 공개 방법으로 꺼낼 수 있습니다.
  • 수업 밖에서 특히 유용한 일을하지 않는 개인 방법은 해당 수업의 공개 방법을 통해 테스트 할 수 있습니다.

확실히 맞아요. 어쨌든 개인 방법을 테스트해야합니다. 그리고 mbunit 단위 테스트 프레임 워크는 개인 회원에 액세스 할 수 있습니다.

이 블로그보기 :개인 방법 테스트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top