2010-07-30 2 views
5

저는 변화를 위해 모의 작업을하기 위해 애쓰며 사람들이 일반적으로 모의 수업을하는 곳이 궁금합니다. 나는 어떤 것도 작동하지 않는 세 가지 기본적인 선택을 갖고있는 것처럼 보입니다.어디서 내 목소리를하나요?

응용 프로그램 어셈블리 자체에 넣을 수 있습니다.이 경우에는 응용 프로그램과 함께 제공되기 때문에 나쁘게 보이지만 최종 빌드 중에 단위 테스트에 사용할 수 있으며 순환 참조가 없습니다. 이것은 가장 간단한 접근 방법입니다.

단위 테스트 중에 사용할 수 있도록 별도의 모의 어셈블리를 만들 수 있으므로 응용 프로그램과 테스트 응용 프로그램에서 사용할 수 있지만 모든 실제 유형을이 어셈블리로 이동하거나 순환 참조를 만듭니다.

테스트 어셈블리에 넣을 수 있지만 응용 프로그램 자체에서 사용할 수 없기 때문에 응용 프로그램의 청크를 만드는 프로세스로 사용할 수 없습니다.

필자는 테스트 파트는 물론 시스템 개발을 돕기 위해 조롱을 사용하는 경향이 있으므로 어디에 넣을 지 잘 모릅니다. 또한 코드의 최종 릴리스는 모두 단위 테스트 프로세스를 거쳐야하므로 빌드주기 중에 사용 가능한 모의가 필요합니다.

모의 수업을 배치해야하는 사람이 있습니까? 어떤 도움

덕분에 T

+0

'InternalsVisibleTo'어셈블리 속성을 살펴보십시오. 그것은 당신의 선택을 향상시킬 것입니다 : http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Flynn1179

+0

"나는 시스템을 개발하는 것을 돕기 위해 조롱을 사용하는 경향이 있습니다"- 이상하게 보입니다. 확실히 주어진 클래스는 응용 프로그램의 일부이거나 테스트의 일부입니다. 그러나 둘 다 아닙니다. –

+0

@Flynn 이미 그 감사를 사용하고 있습니다. @Tim - 내가 잘못 가고있는 곳일 수 있습니다. 내가 사용하기를 기다리고있는 위대한 조롱을 가질 때 항상 내 시스템을 개발하기 위해 항상 많은 레이어를 거쳐 다시 말해야 만하는 것은 큰 부끄러운 것처럼 보인다. 프런트 엔드에서 작업하기 전에 시스템의 모든 레이어가 이미 코딩되어 있는지 확인하십시오. – Tollo

답변

10

귀하의 모의 객체는 단위 테스트 프로젝트에 가야한다. 귀하의 응용 프로그램은 귀하의 모의 객체에 의존해서는 안됩니다. 일반적으로 응용 프로그램은 인터페이스를 사용하므로 모의 객체가 해당 인터페이스를 구현합니다. 귀하의 신청서는 귀하의 시험 프로젝트를 필요로하지 않거나 참조해야합니다.

+1

그래서 응용 프로그램의 속도와 작업을 위해 모의 작업을 사용하지 않으시겠습니까? 단위 테스트 프로젝트에서 시작했는데 사용하기 위해 울고있는 완벽하게 작동하는 모든 모의 작업을 수행하는 동안 내 응용 프로그램이 항상 백 엔드에 대해 말로 말해야하는 경우 엄청난 낭비였습니다. – Tollo

+0

"응용 프로그램을 빠르게 사용하고 작업하기 위해 모의을 사용하지 않습니까?" 아니; 응용 프로그램에서 테스트 코드를 유지하십시오. 조롱과는 별도로 단위 테스트 코드도 있습니다. 사용하기 위해 부르짖는 것입니까? –

+0

두 개의 주석 사이에 속는 것에 대해 유감스럽게 생각 합니다만, 단위 테스트 코드와 모의 객체 사이의 주요 차이점은 제 프론트 엔드가 개발자의 다른 레이어가 있기 전에 주로 프론트 엔드가 백엔드 서비스와 클래스의 일부 형식을 사용해야한다는 것입니다 코딩을 마쳤습니다. 내 테스트 프로젝트에서 이걸위한 멋진 모의 세트를 이미 가지고있다. 사용하지 못하는 것이 큰 부끄러운 것처럼 보인다. 프런트 엔드에서 작업하기 전에 이미 코딩 된 아래의 모든 레이어를 찾았습니까? – Tollo

0

프로젝트에서 우리가하는 일은 내부외부입니다. 내부 의존성에 대한 모의는 유닛 테스트 프로젝트 (또는 솔루션 전체에서 사용되는 경우 별도의 Mocks 프로젝트)로 들어갑니다. 외부 의존성에 대한 모의는 애플리케이션 자체에 들어가 배포 및 통합 테스트에 사용됩니다.

외부 종속성은 환경적인 것입니다. 즉, Active Directory, 웹 서비스, 데이터베이스, 로거 등입니다. 의존성 주입은 같은 방식으로 처리됩니다. 외부 종속성은 구성 파일에 정의되어 있으므로 런타임에 사용할 종속성을 쉽게 선택할 수 있습니다.

내부 의존성은 그 밖의 모든 것입니다.

관련 문제