Visual Studio 2012 및 Entity Framework 5에서 단위 테스트를 위해 LocalDb를 설정하는 방법
Entity Framework 5를 사용하는 Visual Studio 2012 ASP.NET MVC 프로젝트가 있습니다.
데이터베이스에 의존하는 몇 가지 단위 테스트가 있습니다. 중앙 SQL Server 데이터베이스를 사용하도록 테스트 프로젝트에서 app.config 파일을 설정하면 제대로 작동합니다.
그러나 LocalDb를 사용하는 것이 훨씬 더 좋기 때문에 각 개발자는 테스트를 실행할 때 자신의 데이터베이스를 갖게됩니다. 특히 DropCreateDatabaseAlways
실행할 때 테스트를 설정하고 싶기 때문에 .
그러나 설정이 작동하지 않습니다. app.config에서 이것을 시도하면 :
<add name="TestDb"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=unittestdb;
Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\unittestdb.mdf"
providerName="System.Data.SqlClient" />
나는 얻다:
System.Data.SqlClient.SqlException : 파일 활성화 오류가 발생했습니다. 실제 파일 이름 '\ unittestdb.mdf'가 올바르지 않을 수 있습니다. 추가 오류를 진단 및 수정하고 작업을 다시 시도하십시오. CREATE DATABASE에 실패했습니다. 나열된 일부 파일 이름을 만들 수 없습니다. 관련 오류를 확인하십시오.
mdf 파일이 이미 존재하기를 원하는 것처럼 들리는데, 데이터베이스를 만들려고하기 때문에 이상하게 보입니다. mdf 파일을 수동으로 생성해도 오류 메시지는 변경되지 않습니다.
시험:
AppDomain.CurrentDomain.SetData(
"DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));
이것은 /bin/Debug/yourdbname.mdf에 Db 파일을 생성합니다.
다음을 사용합니다.
// Declare this property - this is set by MSTest
public TestContext TestContext { get; set; }
// In test initialization - note the signature should be exactly this
// A static void method with one argument of type TestContext
[ClassInitialize]
public static void SetUp(TestContext context)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(context.TestDeploymentDir, string.Empty));
}
을 사용하면 문제가 발생할 수 AppDomain.CurrentDomain.BaseDirectory
있습니다. 대신 다음을 사용하세요.context.TestDeploymentDir
테스트 프로젝트의 경우 다음 사항에 유의하십시오.
AttachDBFilename = | DataDirectory |
즉, web / production / whatever 앱의 App_Data 폴더가 아니라 출력 / bin / debug 폴더에서 단위 테스트를 찾습니다.
두 가지 작업을 수행해야합니다. 1. 데이터베이스 파일을 App_Data 폴더에서 테스트 앱의 루트로 이동합니다. 2. 데이터베이스를 강조 표시하여 Visual Studio에서 속성 창을 가져옵니다. 프로젝트를 실행할 때 출력 폴더에 복사되도록 빌드 작업을 "콘텐츠"로 설정합니다.
짜잔.
이 코드를 사용하는 것이 좋습니다 ( Jupaol 의 답변에 따라 ).
[ClassInitialize]
public static void SetUp(TestContext context)
{
AppDomain.CurrentDomain.SetData(
"DataDirectory",
context.TestDeploymentDir);
}
일반적으로 이것은 TestResults\<test run>\Out\
솔루션의 폴더 안에 데이터베이스를 만듭니다 .
문제에 대한 답을 찾는 동안 귀하의 질문을 찾았습니다. 별도의 프로젝트에서 nUnit과 함께 EntityFramework를 사용하여 App.config를 변경해야했습니다.
다음과 같이 보였습니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
'program story' 카테고리의 다른 글
자바에서 코 루틴 구현 (0) | 2020.12.02 |
---|---|
JavaScript가 브라우저에 구현 된 유일한 클라이언트 측 스크립팅 언어 인 이유는 무엇입니까? (0) | 2020.12.02 |
rdtscp, rdtsc : 메모리와 CPUID / rdtsc의 차이점은 무엇입니까? (0) | 2020.12.02 |
파이썬-모든 내장 데코레이터는 무엇입니까? (0) | 2020.12.02 |
Chromecast Receiver Emulator 또는 개발 용 수신기 역할을하는 대체 앱이 있습니까? (0) | 2020.12.02 |