2017-05-16 2 views
0

InMemory 2.0-preview1과 함께 Entity Framework Core 2.0-preview1을 사용하고 있습니다. 각 단위 테스트 클래스는 부모가 사용할 수있는 새로운 메모리 데이터베이스를 만드는 일회용 클래스를 상속합니다.UseInMemoryDatabase 컨텍스트가 단위 테스트에서 공유되지 않습니다.

public Constructor() 
    { 
     var services = new ServiceCollection(); 

     services.AddEntityFrameworkInMemoryDatabase() 
      .AddDbContext<DBContext>(o => o.UseInMemoryDatabase("Test")); 

     var serviceProvider = services.BuildServiceProvider(); 

     Context = serviceProvider.GetRequiredService<DBContext>(); 
    } 

이름이 여러 시험에서 공유함으로써 각 테스트 내 빌드 서버에 대한 용납 할 몇 초를 지속 각 단위 테스트의 결과로 새로운 컨텍스트를 생성 할 수 없다는 것입니다 데이터베이스를주는 문제. 2.0에서 변경된 이유 또는이 문제를 해결하는 방법에 대한 많은 문서를 찾을 수 없습니다. 새로운 .UseTransientInMemoryDatabase을 사용해 보았지만 아무 것도 변경되지 않는 것으로 보입니다. 미리 감사드립니다.

+0

단위 테스트에서 동일한 db 컨텍스트를 공유하는 경우 각 테스트에 대해 특정 사전 조건을 확인하고 사후 조건을 어떻게 확인합니까? –

+0

컨텍스트에 추가 된 엔티티에 대한 추적을 수행하고 각 테스트 후에 플러시합니다. 이렇게하면 요청 당 데이터베이스의 초기화 시간을 무시할 수 있습니다. –

+0

정적 생성자를 사용해 보셨습니까? –

답변

0

xUnit 픽스처를 사용하여 모든 테스트 인스턴스에 데이터베이스 저장 컨텍스트를 제공했습니다. 그렇게하면 각 테스트에서 컨텍스트 생성 오버 헤드가 발생하지 않으므로 서버 구축 속도를 크게 높일 수 있습니다.

관련 문제