문제

Linq to SQL을 사용하는 사람들의 단위 테스트 코드는 어떻습니까?

도움이 되었습니까?

해결책

업데이트:

Fredrik은 자신의 블로그에 linq2sql 애플리케이션 단위 테스트를 수행하는 방법에 대한 예제 솔루션을 게시했습니다.다음에서 다운로드할 수 있습니다.

http://web.archive.org/web/20120415022448/http://iridescent.no/post/DataContext-Repository-Pattern-Example-Code.aspx

나는 그가 예제 솔루션을 게시했을 뿐만 아니라 모든 클래스에 대한 인터페이스를 추출하여 디자인을 더욱 분리시키는 데 성공했다는 점이 훌륭하다고 생각합니다.

내 이전 게시물:

*DataContext 래퍼를 만들기 위한 좋은 시작이라고 생각되는 다음 블로그를 찾았습니다.링크1 링크2

첫 번째 항목이 테이블에 대한 인터페이스 추출 수단도 구현한다는 점을 제외하면 거의 동일한 주제를 다룹니다.두 번째 것은 더 광범위하므로 이것도 포함시켰습니다.*

다른 팁

3년 늦었지만 저는 이렇게 합니다.

https://github.com/lukesampson/LinqToSQL-test-extensions/

래퍼를 작성하거나 많은 배관 작업을 수행할 필요가 없습니다. T4 템플릿을 .dbml 옆에 놓으면 다음을 얻을 수 있습니다.

  1. 데이터 컨텍스트를 위한 인터페이스입니다.IExampleDataContext
  2. 데이터 컨텍스트에 대한 메모리 내 모의.MemoryExampleDataContext

둘 다 DBML에 이미 구성한 매핑을 자동으로 사용합니다.

그래서 당신은 다음과 같은 일을 할 수 있습니다

public class ProductRepo {
    IExampleDataContext DB { get; set };
    public ProductRepo(IExampleDataContext db) {
        DB = db;
    }

    public List<Product> GetProducts() {
        return DB.Products.ToList();
    }
}

다음 중 하나로 호출할 수 있습니다.

new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing

또는

new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB

DataContext를 래핑한 다음 래퍼를 모의합니다.테스트를 위해 코딩이 필요하지만 어떤 사람들은 냄새가 난다고 생각하는 가장 빠른 방법입니다.그러나 때로는 (쉽게) 조롱할 수 없는 종속성이 있는 경우 이것이 유일한 방법입니다.

Linq를 사용하면 테스트가 훨씬 쉬워집니다.Linq 쿼리는 Linq-to-sql 항목과 마찬가지로 목록에서도 잘 작동합니다.목록 개체에 대해 Linq를 SQL로 교체하고 그런 식으로 테스트할 수 있습니다.

Mattwar가 에 끝났습니다. Wayward 웹 로그 확장 가능한 Linq2Sql 데이터 컨텍스트를 모형화하는 방법에 대한 훌륭한 기사가 있었습니다.확인 해봐 -- MOCKS NIX - SQL DATACONTEXT에 대한 확장 가능한 LINQ

일반적으로 LINQ to SQL을 사용하는 코드 부분을 테스트할 필요는 없지만 정말로 원한다면 서버에 대해 쿼리하는 것과 동일한 데이터 세트를 사용하여 메모리 내 개체로 변환하고 이에 대해 LINQ 쿼리를 실행합니다(Queryable 대신 Enumerable 메서드를 사용함).

또 다른 옵션은 Matt Warren의 DataContext의 조롱 가능한 버전.

또한 디버거를 통해(IQueryable 개체에서) LINQ to SQL이 사용하는 SQL 문을 가져와 수동으로 확인한 다음 자동화된 테스트에 포함할 수도 있습니다.

LINQ to SQL은 실제로 DBML에 정의된 것에서 즉시 데이터베이스를 생성할 수 있으므로 단위 테스트에 매우 유용합니다.

DataContext를 통해 DB를 생성하고 처음부터 이를 비워 두어 ORM 계층을 테스트하는 것이 정말 좋습니다.

내 블로그에서 이 내용을 다룹니다. http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

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