2011-09-22 3 views
6

일부 테스트를 위해 리플렉션을 통해 ClassInitialize 메소드에서 생성 된 (리플렉션을 통해) 구성을 사용하여 데이터 기반 테스트를 실행해야합니다. 모든 것을 시도했지만 데이터 소스를 제대로 설정하지 못했습니다.MsTest, DataSourceAttribute - 런타임 생성 파일로 작업하는 방법?

테스트는 csv 파일 (클래스 당 한 줄)의 클래스 목록을 취한 다음 데이터베이스에 대한 매핑이 제대로 작동하는지 테스트합니다. 즉 모든 엔티티에 대해 데이터베이스에서 하나의 항목을 가져 오려고합니다. 테이블 구조가 일치하지 않을 때 예외를 throw합니다).

testmethod은 다음과 같습니다

[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV", 
    "|DataDirectory|\\EntityMappingsTests.Types.csv", 
    "EntityMappingsTests.Types#csv", 
    DataAccessMethod.Sequential) 
] 
[TestMethod()] 
public void TestMappings() { 

분명히 파일이 EntityMappingsTests.Types.csv입니다. DataDirectory에 있어야합니다.

이제 Initialize 메서드 (ClassInitialize로 표시됨)에 함께 넣은 다음 쓰려고했습니다.

어디에 써야하나요? DataDirectory는 어디에 있습니까?

내가 시도 :

File.WriteAllText(context.TestDeploymentDir + "\\EntityMappingsTests.Types.csv", types.ToString()); 
File.WriteAllText("EntityMappingsTests.Types.csv", types.ToString()); 

"단위 테스트 어댑터가 데이터 소스에 연결하거나 데이터를 읽지 못했습니다"의 두 결과. 더 정확한 :

오류 정보 : Microsoft Jet 데이터베이스 엔진은 객체 EntityMappingsTests.Types.csv '를 찾을 수 없습니다. 개체가 이고 이름과 경로 이름의 철자가 올바른지 확인하십시오.

그렇다면 파일을 어디에 넣어야합니까?

나는 또한 현재 디렉토리에 쓰고 DataDirectory 부분을 꺼내려고했습니다. 동일한 결과가 나타납니다. 슬프게도 제한된 디버깅 지원이 있습니다.

+0

http://technet.microsoft.com/en-us/sysinternals/bb896645에서 ProcessMonitor 도구를 사용하십시오. MSTest.exe 또는 관련 qtagent32.exe에 필터를 설치하고 테스트로드 프로세스에서 어느 시점에서 어떤 위치에서로드하려고 시도하는지 확인하십시오. 그런 다음 여기에서 세부 정보에 대한 업데이트를 제공하십시오. – kroonwijk

+0

당신이 asnwer로 게시 할 수 있도록 받아 들일 수 있습니다. 바보 같은 .... 당신의 충고가 효과가있어. – TomTom

+0

물론 이죠. – kroonwijk

답변

5

technet.microsoft.com/en-us/sysinternals/bb896645에서 ProcessMonitor 도구를 사용하십시오. MSTest.exe 또는 관련 qtagent32.exe에 필터를 설치하고 테스트로드 프로세스에서 어느 시점에서 어떤 위치에서로드하려고 시도하는지 확인하십시오. 그런 다음 여기에서 세부 정보에 대한 업데이트를 제공하십시오.

1

VS 프로젝트에 CSV 파일을 추가 한 후에는 해당 속성을 열어야합니다. "Copy To Output Directory"속성을 "Copy Always"로 설정하십시오. DataDirectory는 기본적으로 컴파일 된 실행 파일의 위치로 출력 디렉터리에서 실행되므로 찾을 수 있습니다.

관련 문제