2017-03-24 4 views
0

내 xUnit .net 핵심 테스트 프로젝트의 구성 파일에서 연결 문자열을 가져 오는 데 권장되는 방법을 알고 싶습니다.xUnit 테스트 프로젝트 연결 문자열

.net 코어 용으로 새 Visual Studio 2017 xUnit Test 프로젝트 템플릿을 사용하여 테스트 프로젝트를 설정했습니다. 이 프로젝트는 두 가지 다른 .net 핵심 클래스 라이브러리 프로젝트를 참조하는 통합 테스트를 실행합니다. 그 중 하나는 EF 코어를 사용하여 데이터베이스와 대화합니다.

정상적으로 연결 문자열을 설정하거나 클래스 라이브러리 프로젝트에서 액세스해서는 안되는 것으로 알고 있습니다. 연결 문자열을 설정해야하는 클래스 라이브러리를 사용하는 응용 프로그램이어야합니다.

그러나이 경우 xUnit 테스트 프로젝트는 클래스 라이브러리 프로젝트처럼 취급됩니다. 일종의 구성 파일을 설정하고 테스트 프로젝트에서 액세스하는 방법에 대한 예제를 보지 못했습니다. 테스트 프로젝트가 Datalayer 클래스 라이브러리 프로젝트를 사용하고 적절한 연결 문자열을 전달할 수 있도록 구성 파일에서 연결 문자열에 어떻게 액세스합니까?

+0

테스트 또는 TestServer와 같은 연결 문자열이 필요합니까 (https://msdn.microsoft.com/en-us/library/microsoft.owin.testing.testserver(v=vs.113)). .aspx) 충분하겠습니까? – Ignas

+0

아래 내 솔루션을 참조하십시오. 감사합니다. – user1750537

답변

4

appsettings.json 구성 파일에서 읽는 연결 문자열로 초기화 된 DbContextOptions 개체를 반환하는 DbOptionsFactory 클래스를 만들어 xUnit 테스트 프로젝트에서 연결 문자열에 액세스 할 수있었습니다.

은 Microsoft.Extensions.Configuration에 대한 종속성이 필요

public static class DbOptionsFactory 
{ 
    static DbOptionsFactory() 
    { 
     var config = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json") 
      .Build(); 
     var connectionString = config["Data:DefaultConnection:ConnectionString"]; 

     DbContextOptions = new DbContextOptionsBuilder<MyDbContext>() 
      .UseSqlServer(connectionString) 
      .Options; 
    } 

    public static DbContextOptions<MyDbContext> DbContextOptions { get; } 

} 

appsettings.json 내 DbContext를 인스턴스화 할 때 내가 구성 파일에서 연결 문자열이있는 optionsBuilder 객체를 전달

{ 
    "Data": { 
    "DefaultConnection": { 
     "Name": "MyDbContext", 
     "ConnectionString": "connection string goes here" 
    } 
} 
} 

좋아요 :

using (var context = new MyDbContext(DbOptionsFactory.DbContextOptions)) 
{ 
    // access db here 
} 

희망 그 외에는 같은 문제가 발생합니다.

+0

AddJsonFile을 얻으려면 Microsoft.Extensions.Configuration.Json NuGet 패키지를 설치해야했습니다. –

관련 문제