2010-12-09 6 views
3

NUnit으로 그립을 얻으려고합니다. 설치하고 성공적으로 실행합니다. 계획. 테스트 코드에서 프로덕션 코드를 분리하고 싶기 때문에 다른 프로젝트에서 테스트를 작성합니다. 프로젝트 테스트 원래 프로젝트에 연결됩니다. (IDE C# 익스프레스 2010)컴파일러 오류 얻기 CS0122 - '프로젝트'의 보호 수준으로 인해 '구성원'에 액세스 할 수 없습니다 - 다른 프로젝트의 클래스에 액세스하려고 시도 중입니다.

내 Testcode은 다음과 같습니다 : 나는 내가 production.Import.XMLHandler 클래스를 공개함으로써이 문제를 해결할 수있는 알고

using NUnit.Framework; 

namespace test.Import 
{ 
    [TestFixture] 
    class XMLOpenTest 
    { 
     [Test] 
     public void openNotAPath(){ 
      try 
      { 
       production.Import.XMLHandler.open("Not A Path"); 
      } 
      catch 
      { 
       Assert.Fail("File Open Fail"); 
      } 
     } 
    } 
} 

을,하지만 난 할 수 있도록 내 productioncode을 변경하려는 해달라고 이런 종류의 테스트.

어떻게이 문제를 해결할 수 있습니까? 테스트 코드를 변경할 수 있습니까? 두 프로젝트에서 테스트 코드와 생산 코드를 분리하는 좋은 방법이 있습니까? 인터넷에 dummys에 대한 자원이 있습니까?

+2

@ * public * class XMLOpenTest' .... 나를 위해 수 많은 시간을 보냈습니다.) – Machinarius

+0

@Machinarius는 공개적으로 작성했기 때문에 참조가 필요한 프로젝트간에 클래스를 복사하는 경우가 있습니다. thx – bart

+1

@bart 대중에게 알리는 장점은 한 번 더 쉽게 사용할 수 있다는 것입니다. 하지만 이제는 수업이 어셈블리 외부에서 볼 수 있습니다. 그것은 장기적으로 당신이 원하는 것이 아닐 수도 있습니다. 이것이 여전히 더 나은 해결책 일 수있는 개념 프로젝트의 증거라면. 이것이 사업 목적이라면 다른 사람들이 그것을 공개 한 후에 액세스 할 수있는 것에 대해 생각해야합니다. – Johannes

답변

9

일반적으로 InternalsVisibleToAttribute을 사용하여 해결됩니다. thisthis을 참조하십시오.

+0

잘 수행했습니다. [assembly : InternalsVisibleTo ("test")]를 최상위 수준에 추가했습니다. 이제 모든 것이 복숭아입니다. 탱크. – Johannes

관련 문제