2010-12-15 6 views
6

우리는 미친 데이터 기반 응용 프로그램을 가지고 있습니다. 우리는 응용 프로그램을 단위 테스트하고 싶지만 개발자는 데이터의 양 때문에 가짜 저장소를 완전히 만들지 않습니다. 나는 그들을 정말로 비난하지 않는다.단위 테스트 데이터로 ASP.NET MVC

기존 응용 프로그램에 테스트를 추가하고 있음을 이해하십시오. 우리가 다시 시작한다면 가짜 리포지토리를 사용하여 더 나은 단위 테스트를 수행하기 위해 많은 아키텍처를 변경해야합니다.

우리는 알려진 mdf 파일을 테스트와 함께 배포하고 복사 한 다음 테스트를 수행하는 데 사용하고 싶습니다. 이에 대한 승인 된 기술이 있습니까? 필자는 테스트 용 dll에 리소스를 포함시키는 것에 익숙하지만 mdf를 포함하지는 않습니다.


(종류의) 해결책 : 내가 Linq에 데이터 컨텍스트를 조롱에 앤드류 Tokeley의 게시물에서 DataContextWrapper을 복용 결국

(http://andrewtokeley.net/archive/2008/07/06/ mocking-linq-to-sql-datacontext.aspx) 그리고 기본적으로 List of FakeDataContext.cs를 만들었습니다.

:

나는 ("> < # = table.BaseClass.QualifiedName # * FROM을 선택"생각) 같은 것들로 가득 찬 거대한 클래스를 만들 알려진 좋은 데이터베이스에서 데이터를 복사 할 진정한 야만적 인 T4 템플릿을 작성
List<Customer> _customers = new List<Customer>(); 
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"}); 

클래스는 25K 라인이지만, T4부터 모든 라인, 신경을 쓴다? 그것은 우리가 데이터 컨텍스트를 조롱 할 수있게 해 주므로 우리는 질의를 올바르게 받아들이는 합리적인 확신을 가지고 가짜 컨텍스트에 대해 linq을 테스트 할 수 있습니다. 원래 개발자는 repo에 많은 비즈니스 로직을 넣었으므로 알려진 좋은 데이터에 대한 로직을 테스트 할 수 있습니다.

+1

당신이 찾고있는 것은 @Jakub가 좋은 답을 제공 한 통합 테스트를 수행하는 방법입니다. 어떤 테스트 프레임 워크를 사용하고 있습니까? – mkchandler

+0

Vanilla VS 2010을 사용하여 유닛 통합 (소규모 통합?) 테스트를 진행하십시오. 다음과 같은 내용 : 5 개의 잘못된 비밀번호를 사용하여 멤버십 레이어가 계정을 올바르게 잠그나요? 그것과 셀레늄이 잔뜩 엉망이 된 것을 확인하기 위해 수프를 먹는다. –

답변

5

mdf 파일을 배포 할 필요가 없도록 공유 서버에서 테스트 데이터베이스를 설정할 수 있습니까?

또한 모든 단위 테스트를 TransactionScope로 래핑 할 수 있습니까?

내가 모든 테스트에 대한 잘 알려진 참조 데이터를 포함하고 같은 통합 테스트에 대한 기본 클래스 만들어 내 회사에서 테스트 데이터베이스 사용했습니다

:

[TestClass] 
public class ServiceTest 
{ 
    private TransactionScope Transaction { get; set; } 

    [TestInitialize] 
    public virtual void TestInitialize() 
    { 
     Transaction = new TransactionScope(); 
    } 

    [TestCleanup] 
    public virtual void TestCleanup() 
    { 
     Transaction.Dispose(); 
    } 
} 

각각의 테스트는 모든 그것의 변경을 롤백됩니다 따라서 데이터베이스를 오염시키는 테스트 데이터에는 아무런 문제가 없습니다.

+1

기술적으로 말해서, 이것을 "통합 테스트"라고합니다. 이것은 내가 프로젝트에서 사용하는 접근 방식이며, 훌륭하게 작동합니다! – mkchandler

+0

xUnit은 http : //xunit.codeplex와 같은 내장 된 방법을 제공합니다.com/ – mkchandler

+0

@mkchandler - 네가 맞아 - 대답을 편집 했어. 건배! –

0

조롱 프레임 워크를 보았습니까? 코드가 데이터 종속성을 단위 테스트중인 객체에 삽입 할 수있는 방식으로 작성 되었다면 이러한 데이터 종속성을 조롱 할 수 있어야합니다.

저는 Moq과 함께 큰 성공을 거두었지만 처음부터 의존성 주입으로 코드를 작성했습니다.

+0

브라이언은 앱이 과도하게 데이터 중심이라고 언급했습니다. 조롱 (훌륭한 사례)이 현실적으로 불가능할 수도 있습니다. 나는 데이터베이스에서 너무 많은 데이터를 사용하는 응용 프로그램에서 작업하는 데 사용하고 논리는 너무 많은 클래스/서비스에 퍼져서 처음 다시 작성하지 않고 조롱하는 것이 불가능할 것입니다 .-) –

+0

그래, 그 엉망입니다. 가능한 한 moq를 사용하지만 가짜 데이터의 양은 정당하지 않습니다. 우리는 데이터 의존성을 주입하고 있지만, 위조 된 저장소는 점점 커지고 있습니다. –

관련 문제