2013-04-26 2 views
0

일부 오픈 소스 코드에 대한 일부 단위 테스트를 작성하려고합니다. 기록 만 최소한의 메모리 에로드 된 것을 테스트 할 테스트의dbcontext 및 메모리의 요소 재설정

하나 (즉, 누군가가 전화 인 경우 :

DataContext.SomeTable.ToList().Where(s=>s.Id <=10) 

테스트가 실패)이 들어

을에 작업, 단위 테스트를 실행하기 전에 DataContext.SomeTable.Load 0 항목을 갖도록 다시 설정해야합니다.

현재이 TestFixture (nunit을 사용하지만 관련이 없어야 함)는 추상적이며 인스턴스 작성시 DbContext가 주입되므로 단위 테스트에서 다른 제공자를 테스트 할 수 있습니다. 로드 된 엔티티를 지울 수있는 방법이 있다고 생각하지 않지만 삽입 된 컨텍스트와 동일한 데이터베이스 공급자를 사용하는 새 DbContext를 어떻게 처리하고 만들 수 있는지 궁금합니다.

답변

1

먼저 코드를 게시 할 수 있습니까?

둘째, 올바르게 이해하면 매번 컨텍스트를 다시 작성 하시겠습니까? 한 가지 해결책은 컨텍스트 자체가 아닌 컨텍스트를 만드는 함수를 전달하는 것입니다. 이와 같이 :

public class MyTest { 

    private Func<IMyContext> createContext; 

    public MyTest(Func<IMyContext> createContext){ 
     this.createContext = createContext; 
    } 

    [Test] 
    public void RunTest(){ 
     using(var context = this.createContext()){ 
      // do stuff with context 
     } 
    } 
} 
+0

물론 위임자를 전달하십시오! 고마워. – Brent

0
public class TestClass 
{ 
    private MyContext context; 

    [SetUp] 
    public void Setup() 
    { 
     // is executed before each test 
     context = new MyContext(); 
    } 

    [Test] 
    public void Test1() 

     context.SomeTable.ToList().Where(s => s.Id <= 10); 
    } 

    [TearDown] 
    public void Complete() 
    { 
     context.Dispose(); 
    } 

} 

각 테스트는 테이블에 한 번만 액세스해야합니다. 단위 테스트 포인트는 각 테스트가 단일 시나리오에 대한 것입니다.