2011-12-06 50 views
2

當我嘗試從Ocean SDK運行單元測試示例時,當我嘗試在NUnit.exe中加載DLL時出現錯誤。 任何人都可以幫忙,可能是什麼原因?下面海洋單元測試

異常來自NUnit.exe:

System.IO.FileNotFoundException... 

Server stack trace: 
    at System.ModuleHandle.ResolveType(Int32 typeToken, RuntimeTypeHandle* typeInstArgs, Int32 typeInstCount, RuntimeTypeHandle* methodInstArgs, Int32 methodInstCount) 
    at System.ModuleHandle.ResolveTypeHandle(Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext) 
    at System.Reflection.Module.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) 
    at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, Module decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, RuntimeMethodHandle& ctor, Boolean& ctorHasParameters, Boolean& isVarArg) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(Module decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeType type, RuntimeType caType, Boolean inherit) 
    at System.RuntimeType.GetCustomAttributes(Type attributeType, Boolean inherit) 
    at NUnit.Core.CoreExtensions.InstallAdhocExtensions(Assembly assembly) 
    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.BuildSingleAssembly(TestPackage package) 
    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) 
+0

我們通過將所有的NUnit程序集和Ocean dll放入擴展文件夾中,擺脫了這個信息。但是現在當我們運行它時,會出現一個錯誤。 在System.Reflection.Module._GetTypesInternal(StackCrawlMark&stackMark) 在System.Reflection.Assembly.GetTypes() 在Slb.Ocean.Petrel.Testing.PetrelEngine.InitializeInstance() 在Slb.Ocean.Petrel.Testing.PetrelEngine在C:\ Program Files \ Schlumberger \ Ocean 2011 \ Samples \ UnitTesting \ UnitTest \ AssemblySetup.cs中的UnitTestDemo.AssemblySetUp.RunBeforeAnyTests()中的.get_Instance() :line 30 – Prem

回答

4

此情況下,通過海洋開發已經解決了。門戶網站,我們發現,遵循(注意)樣本的readMe文件中的所有說明是非常重要的,例如,「確保你有附加的測試程序集複製到petrel根目錄」 - 不僅意味着NUnit root的DLLs,而且還包括lib-子文件夾。發現有兩個「不清楚」的點:1)nunit.exe.config中的ProbingPath必須由Petrel的ProbingPath擴展但不能替換,2)由於某種原因,用戶可能需要複製NUnit「framework」子文件夾的內容也成爲Petrel根。

+1

此方法似乎不適用於Petrel/Ocean 2013年,是嗎? – Tessem

+0

我不再在Ocean團隊中,但據我所知,從2013年發佈的版本開始,Ocean有一個「集成的」NUnit引擎,如果您有機會,請參閱Ocean開發人員指南第11卷:「許可,部署,和單元測試「瞭解更多詳情。 – Alex

0

可能會選中NUnit的「啓用卷影副本」選項。應該關閉此選項,以便運行測試所需的文件將被複制到Petrel根文件夾。