1

Visual Studio에서 다른 프로젝트의 클래스에 대해 메서드를 호출하는 단위 테스트가 있습니다.이 테스트를 MyClass.A()라고 부릅시다.단위 테스트에서 다른 프로젝트의 설정에 액세스 할 수 없습니다.

A() 안에는 MyClass의 프로젝트 속성 설정이 있습니다.

정상 런타임 중에 MyClass.A()를 사용하면 설정에서 올바른 값을 가져옵니다. 그러나, 단위 테스트에서 그것을 할 때, null을 반환합니다. 설정을 복사하려면 유닛 테스트 프로젝트에서 빌드 후 이벤트가 필요합니까?

는이 설정이 MyClass.A()에 액세스되는 방법입니다

string connectionString = global::DataAccess.Properties.Settings.Default.ConnectionString; 

해결

그래서 문제가 내가 좋아 젖은 화장지의 moldering 더미와 함께해야 할 일을했을 내 뇌에 전화 해. MyClass에는 연결 문자열로 설정해야하는 공용 속성이 있습니다. Set 접근자는 값을 적절한 Settings 속성에 할당합니다. 모든 응답을 주셔서 감사합니다.

+0

내가하고있는 일은 기술적으로 단위 테스트가 아니라는 것을 알고 있으므로이 게시물에 다른 제목을 부여해야합니다. 궁극적으로, 단위 테스트에서 실행할 때 올바른 설정 값을 얻지 못하는 이유를 알아 내고 싶습니다 ... – lintmouse

답변

1

실제로 두 가지 옵션이 있습니다. 첫째, Internal 대신 설정 Public을 만들 수 있습니다.

둘째 단위 테스트 어셈블리를 지정하여 주 어셈블리에 InternalsVisibleToAttribute을 추가 할 수 있습니다.

보조 노트에
[assembly:InternalsVisibleTo("MyUnitTestLibrary")] 

, 당신은 ConnectionStringsSection를 사용하여의 app.config에 연결 문자열을 저장하고 읽어 ConfigurationManager를 사용해야합니다.

+0

Settings.Designer.cs에서 설정을 공용으로 만들었지 만 여전히 Null 값을 반환합니다. . 설정에 액세스하는 코드는 설정과 동일한 프로젝트 내에 있습니다. 그래도 공개 할 필요가 있습니까? – lintmouse

1

연결 문자열에 액세스하는 경우 실제로는 단위 테스트처럼 보이지 않습니다. 연결 문자열에 의존하는 동작을 조롱하는 것이 더 나을 수 있으므로 기능을 격리 할 수 ​​있습니다. 여기 test frameworks 일부를 살펴보십시오 (저는 Moq에게 애착이 듭니다).

+0

필자는 들어오는 데이터의 유효성을 검사하기 위해 기존의 코드를 상당히 부지런히 사용하는 서비스를 작성하고 있습니다. 연결 문자열이 유효성 검사 코드에 있습니다. 대상 데이터베이스에서 중복을 검사합니다. 순수한 단위 테스트가 아니라는 것을 알고 있지만 코드를 피할 수 있다면 코드 부분을 조롱하지 않아도됩니다. 나는 Moq를 아직 조사하지 않았지만, 나는 그것을 조사 할 것이다. 나는 NUnit을 사용했으며 꽤 괜찮은 것 같았다. – lintmouse

+0

실제로 중복을 검색하기 위해 유효성 검사 로직을 테스트하고 있습니까? 또한이 유효성 검사 코드에서 얻는 결과는 무엇입니까? – Chris

+0

유효성 검사 로직이 기존 앱과 함께 사용되었습니다. 통과했거나하지 않으면 bool 값을 반환합니다. 네가 뭘하고 있는지 이해할 것 같아. 밸리데이션을 조롱하거나 단위 테스트에서 완전히 무시할 수 있습니다. 그러나 유효성 검사 논리가 매우 복잡하고 복잡하기 때문에 데이터를 통과해야하는 상태를 이해할 수 있는지 테스트하고 싶습니다. – lintmouse

관련 문제