2013-03-15 2 views
1

저는 현재 팀에서 구축하고있는 asp.net mvc 3 웹 응용 프로그램의 단위 테스트에 대해 크게 생각하고 있습니다.단위 테스트 : 실제 데이터베이스 대 조롱

문제는 우리가 정말로 많은 것을 조롱해야한다는 것입니다. 단위 테스트가 모든 웹 서버와 데이터베이스 관련 내용을 다루지는 않는다고 생각합니다.

예 :

public List<Useraccount> GetUseraccounts(Company company) 
{ 
    return company.Useraccounts.ToList<Useraccount>(); 
} 

내 devloper은 그가 hisself으로 준비하고 가짜 회사 객체를 주입하는 불평 :

는 다음 코드와 방법을 가지고있다. 그는 데이터베이스에서 실제 개체를 갖고 싶습니다.

내 질문 : Unit-Test 중에 실제 데이터베이스 (SQLite/SQLExpress 또는 다른 것도 가능)를 사용할 수 있습니까? 유용한가요? 장단점은 무엇입니까?

실제 데이터베이스가 없으면 너무 많은 객체를 조롱해야합니다. 예를 들어 이러한 호출이 작동하는지 확인할 수 없습니다.

Useraccount useraccount = UnitOfWork.UseraccountRepository.Get(u => u.EnableCode == enableCode && u.IsEnabled == false).Single<Useraccount>(); 
+2

* unit * testing과 * integration * testing 사이에 줄이 흐릿 해지는 것처럼 들립니다. –

+0

의미는 무엇입니까? 실제 데이터베이스는 통합 테스트만을위한 것입니까? – mosquito87

+0

제가 믿는 것은 두 가지 검사를 고려해야한다는 것입니다. 하나는 단위 테스트, 클래스가 수행해야 할 일을 테스트하고 종속성을 조롱하는 것입니다. 그런 다음 서비스를 전체적으로 테스트하지만 필요한 경우 타사 서비스를 조롱하는 블랙 박스/통합 테스트의 다음 단계로 이동할 수 있습니다. – Bronumski

답변

0

Effort 도구를 사용해보십시오. Effort은 Entity Framework 기반 응용 프로그램에 대한 자동화 된 테스트를 편리하게 만들 수있는 강력한 도구입니다. 기본적으로 기존의 외부 데이터베이스 대신 경량 in-process 주 메모리 데이터베이스에서 모든 데이터 작업을 실행하는 ADO.NET 공급자입니다. 이 클래스는 기존의 ObjectContext 또는 DbContext 클래스와 함께이 공급자를 사용하기가 쉬운 직관적 인 도우미 메서드도 제공합니다. 기존 코드에 간단한 추가만으로도 외부 데이터베이스가 없어도 실행할 수있는 데이터 기반 테스트를 작성할 수 있습니다.

1

실제 데이터베이스에 대한 테스트는 단위 테스트가 아닌 통합 테스트입니다. 단위 테스트와 동일한 방식으로 통합 테스트를 실행할 수 있습니다. 즉, nunit 또는 mstest 등을 통해 명령 행이나 빌드 서버에서 실행합니다. 그러나 두 가지 추가 단계가 있습니다.

  1. 테스트 데이터를 설정하고 데이터베이스에 주입 한 다음 테스트를 실행 한 다음 테스트 데이터를 다시 제거해야합니다. 이상적인 세계에서는 통합 테스트를 시작할 때 테스트 데이터베이스를 만든 다음 모든 테스트를 실행 한 다음 모든 통합 테스트가 완료된 후에 테스트 데이터베이스를 제거해야합니다. 이것은 비실용적 일 수 있습니다.

  2. 통합 테스트는 단위 테스트보다 훨씬 느리게 실행됩니다. 예를 들어 야간에 빌드 서버 작업에서 실행하여이를 준비하십시오. SqlLite를 사용하거나 어떤 측면에서

, 난 그렇지 않으면 신뢰할 수있는 시험이 아니다, 당신은 현실 세계에서 사용하고있는 데이터베이스의 정확한 유형을 사용하지 말 것.

+0

답변 해 주셔서 감사합니다. 기본적으로 우리는 먼저 단위 테스트를 "완료"하고 싶습니다. Entity 프레임 워크로 인해 코드에서 많은 행을 테스트 할 수 없어서 불완전하다는 느낌이 들었습니다. – mosquito87

+0

단위 테스트 만 사용하여 모든 (또는 대부분의) 데이터 액세스 코드를 처리 할 수있는 드문 응용 프로그램이라고 할 수 있습니다. 그렇다면 EF가 문제이며, 코드를 다시 테스트하여 단위 테스트 할 수 있다고 확신 할 수 있습니까? –

관련 문제