2010-05-05 10 views
13

LINQ to SQL DAL을 사용하여 단위 테스트를 작성하는 좋은 방법은 무엇입니까?데이터 액세스 계층을 이용한 단위 테스트

현재 일부 데이터베이스 테스트를 수행 중이며 데이터베이스에 액세스하는 도우미 메서드를 만들어야하지만 내 주 repo에서는 이러한 메서드가 필요하지 않습니다.

내가 갖고있는 것은 DAL 사본 두 개입니다. 하나는 주 프로젝트에, 다른 하나는 Test 프로젝트에 있습니다. 데이터 영역에 대해 별도의 프로젝트를 만들면 이러한 작업을보다 쉽게 ​​관리 할 수 ​​있습니까? 어떤 방법으로이 문제에 접근하는 것이 더 좋은지 잘 모르겠습니다.

데이터 레이어 프로젝트를 만들면 내 레포도 모두 해당 프로젝트로 옮길 수 있습니까? 레이어를 올바르게 설정하는 방법을 잘 모르겠습니다.

내 DAL 계층에 대한 Linq2Sql을 사용하고 감사

+0

"데이터 레이어 프로젝트를 만들면 프로젝트에 내 레포를 모두 옮길 수 있습니까?" 당신이 이미 아래 답변에 제안 된 저장소 패턴을 사용하고 있지만, 분명히 당신은 또한 어떤 종류의 데이터베이스 접근을해야합니까? 일반적으로 이것은 Linq to SQL을 테스트하고 있음을 의미합니다. Microsoft 엔지니어가 이미 수행 한 것으로 기대합니다.이러한 메소드를 피하고 메모리 콘텍스트 백엔드를 사용하여 리포지토리를 테스트 할 것을 조언합니다. 제이슨 존스 (Jason Jones) 링크에 설명되어 있습니다. – AHM

답변

5

와 나는 별도의 프로젝트로 있습니다. 내 도메인 프로젝트에서 내 DAL 프로젝트에서 사용자 지정 Linq2SqlCarRepository를 사용하여 구현하는 리포지토리 인터페이스가 있으며이 클래스는 생성 된 Linq2Sql 클래스를 래핑합니다.

예 : Car.Core 프로젝트

public interface ICarRepository 
{ 
    IQueryable<Car> GetAllCars(); 
    void Add(Car); 
} 

에서 난 후 생성 된 Linq2Sql 클래스에 대한 액세스를 감싸는 인터페이스의 구현이있다.

Car.Data 프로젝트

public class SqlCarRepository : ICarRepository 
{ 
    private CarDataContext _context; 

    public SqlCarRepository() 
    { 
     _context = new CarDataContext(); 
    } 

    #region ICarRepository Members 

    public IQueryable<Car> GetAllCars() 
    { 
     return _context.Cars; 
    } 

그때 그때 멀리 ICarRepository 및 테스트를 조롱 모의 객체를 사용하는 테스트 프로젝트 Car.Data.Test 있습니다. 나는 이것이 당신이 묘사하고있는 것과 약간 다른 것이라고 생각합니다. 하지만 당신이 응용 프로그램에서 DAL을 사용하려고 노력하고 싶다고 생각합니다. 원한다면 바꿀 수있는 주변 장치입니다.

내가 가진되지 않은 모든 완전히 분류하지만 현재이 프로젝트가 :

지금 일을하는 가장 좋은 방법은되지 않을 수도 있지만 나는 현재하고있어 무엇
Car.Core   --- All the interfaces and domain objects, DTO's etc 
Car.Core.Tests --- The tests of the core business logic. 
Car.Web   --- Asp.net MVC frontend 
Car.Web.Tests --- Tests for the website 
Car.Data   --- The Linq2Sql stuff lives in here 
Car.Data.Tests --- The tests for the DAL layer 

.

나는 The Onion Architecture을 통해 읽고 영감을 얻기 위해 MVC StoreFront 개의 동영상을보고 싶습니다. 행운을 빕니다.

6

"테스트 기반 개발에서 데이터베이스 종속성 제거"라는 Visual Studio 매거진의 2009 년 9 월 기사에 설명 된 저장소 패턴을 사용합니다. 나는이 기사를 아주 성공적으로 읽은 이후로이 패턴을 사용 해왔다. 이 패턴은 데이터 영역을 분리하고 우수한 단위 테스트를 작성하는 데 도움이됩니다.

이렇게하면 n 계층 아키텍처를 채택하고 별도의 데이터 계층을 만들어야하지만 장기적으로 볼 때 가치가 있습니다.

다음은 온라인 기사 링크입니다. Repository Pattern

관련 문제