2009-02-08 5 views
5

NUnit 사용법을 배우고 있습니다. 나는 그것의 주 프로젝트를 솔루션에두고, 그것과 동일한 솔루션으로 별도의 프로젝트를 만들었다. 이 프로젝트에서 기본 프로젝트에 대한 참조를 추가하고 상단에동일한 솔루션에서 다른 프로젝트를 참조 할 때 FileNotFound 예외가 나타나는 이유는 무엇입니까?

using MainProjectNamespace; 

을 추가합니다.

내가 NUnit에 갈 때 주 프로젝트 작업을 참조하지 않은 테스트가 있습니다. 이것들은 NUnit에 익숙해지기 위해 설정 한 테스트이며, 거의 쓸모가 없습니다.

TestLibrary.Test.TestMainProject : System.IO.FileNotFoundException : 는, 파일 또는 어셈블리 'WpfApplication2를로드 할 수 없습니다 버전 = 1.0.0.0, 문화 NUnit과 실제 테스트를 실행하면 테스트가이 예외를 throw = 중립, PublicKeyToken = null ' 또는 해당 종속성 중 하나. 시스템에서 지정한 파일을 찾을 수 없습니다.

왜 예외가 발생합니까?

편집 : 이제

내가 NUnit과에 어셈블리를로드하려고, 그것을하지 않습니다 심지어 부하 이것은 예외입니다

(그래서 심지어 테스트를 실행할 수있는 기회를 얻을 수 없다) 그 SUP 와서 스택 추적 :

System.IO.DirectoryNotFoundException : 경로의 일부를 찾을 수 없습니다 'LONG PATH 여기에 내가 입력합니다하지 마십시오'

System.IO.DirectoryNotFoundException... 

Server stack trace: 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.Directory.SetCurrentDirectory(String path) 
    at NUnit.Core.DirectorySwapper..ctor(String directoryName) 
    at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path) 
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites) 
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites) 
    at NUnit.Core.TestSuiteBuilder.Build(TestPackage package) 
    at NUnit.Core.SimpleTestRunner.Load(TestPackage package) 
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package) 
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package) 
    at NUnit.Core.RemoteTestRunner.Load(TestPackage package) 
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) 
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs) 
    at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
    at NUnit.Core.TestRunner.Load(TestPackage package) 
    at NUnit.Util.TestDomain.Load(TestPackage package) 
    at NUnit.Util.TestLoader.LoadTest(String testName) 

EDIT2 : 위의 경로는 분명히 내 하드 드라이브에 있습니다.

EDIT3 : 방금 ​​NUnit에서 디버그에서 릴리스로 전환하고 TestingLibrary의 릴리스 폴더에서 DLL을로드했습니다.로드되었습니다! 3 개의 네임 스페이스 관련 테스트 중 1 개가 작동했습니다. 어딘가로 가고 있습니다.

EDIT4 : Welllllllll ... 실제로 테스트를 실행할 수는 있지만 원래 오류로 돌아 왔습니다. IT가 주 프로젝트의 어셈블리를 찾지 못했습니다.

+0

상대 경로 대 절대 ​​경로에 문제가 있습니까? – BobbyShaftoe

답변

5

컴파일러는 사용하지 않는 모든 참조를 제거하고 불필요하게 dll을 배포하지 않습니다. using (그 자체로)은 사용으로 간주되지 않습니다. "출력 디렉터리로 복사"설정을 통해 배포 용 dll을 표시하거나 이 dll에 선언 된 형식을 사용하는 코드를 추가하십시오.

+0

클래스의 새 인스턴스를 만들고 몇 가지 작업을 수행하는 코드가 있습니다. 그러나 오류는 여전히 발생합니다. –

+0

또한 "로컬 복사"속성이 설정되어 참조가 출력 디렉터리에 복사되는지 여부를 나타냅니다. –

+0

마크, 새 의견을 확인하십시오. 나는이 일을 할 수 없으며, 항상 모든 대답을 가지고 있습니다 ... –

0

원본 프로젝트에서 출력 어셈블리 또는 네임 스페이스의 이름을 바꿨습니까?

소스 파일이 "WPFApplication1"인 것 같습니다 & 출력 유형을 dll에서 exe로 변경했을 수 있습니다.

+0

원래 프로젝트를 만들 때 몇 가지 이름을 바꿨습니다. 새 프로젝트의 인텔리 센스는 내 사용자 정의 클래스 객체의 유형을 파악할 수 있지만 어떤 이유로 인해 문제가 발생합니다 ... –

+0

확실히 네임 스페이스의 이름을 변경했습니다. –

+0

확인. "참조"에서 어셈블리에 대한 참조를 삭제합니다 (느낌표가있는 참조가 표시 될 수 있음). 소스 프로젝트를 빌드하고 테스트 프로젝트에 참조를 추가하십시오. – shahkalpesh

0

응용 프로그램에서 참조하는 어셈블리 중 하나가 bin 폴더에없는 다른 어셈블리에 종속되어있는 것 같습니다.

+1

답변 해 주셔서 감사합니다. 방금 bin 폴더를 검사했고 디버그와 릴리스 하위 폴더 모두 내 TestLibrary가 의존하는 모든 파일을 포함합니다. WpfApplication2.exe와 같은 ... 다른 아이디어? –

+0

NUnit 콘솔 앱을 사용하려고합니까? 그렇다면 TestDriven.net을 사용해 보셨습니까? 몇 주 전에 유사한 오류가 발생 했었지만, 다른 프로젝트에 의존하는 몇 가지 다른 오픈 소스 프로젝트를 사용했기 때문에 발생했습니다.하지만 다른 버전이 있습니다. – RKitson

+0

TestDriven.NET은 VS Express와 호환됩니까? 나는 "Run Tests"를 보지 않고있다. –

1

나는 동일한 문제가 있었고 RKitsons 응답이 나를 도왔습니다.

기본적으로 내 프로젝트가 의존하는 모든 dll과 nunit.framework.dll을 동일한 디렉토리에 복사했습니다 ... obj/debug /이 작업은 한 가지 방법입니다.

우아한 방법은 Visual Studio의 빌드 탭에서 모드를 해제하고 프로젝트가 올바르게 설정되어있는 경우 모든 종속 DLL을 적절한 "출력"또는 "릴리스"디렉토리로 복사하는 것입니다.

관련 문제