2011-09-16 88 views
4

一個在我的Windows Phone 7項目中的NUnit的測試中保持與下面的錯誤而失敗的:NUnit測試失敗,System.IO.FileNotFoundExeption

Error 4 Test 'MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession' failed: System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified. 
at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract) 
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 279 
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 545 
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\DefaultContractResolver.cs:line 188 
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.GetContractSafe(Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 84 
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalWriter.cs:line 67 
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonSerializer.cs:line 451 
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Formatting formatting, JsonSerializerSettings settings) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonConvert.cs:line 591 
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonConvert.cs:line 528 
at MyProject.Core.Utility.Extensions.ToJson(Object value) in C:\Workspace\MyProject\MyProject.Service\Utility\Extensions.cs:line 15 
at MyProject.Service.Service.TaskService.Save(Task task, ISession session) in C:\Users\jearl\Dropbox\Code\Workspace\MyProject\MyProject.Service\Service\TaskService.cs:line 34 
at MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession() in C:Workspace\MyProject\MyProject.Tests.Unit\Service\TaskServiceTests.cs:line 43 C:\Workspace\MyProject\MyProject.Service\Utility\Extensions.cs 15 

問題是由我寫一個擴展方法引起使用JSON.NET將POCO序列化爲JSON。看起來JSON.NET對System.Runtime.Serialization有依賴性。

我已經嘗試添加JSON.NET和System.Runtime.Serialization引用到我的測試項目,但是這並沒有解決問題。

我正在測試的程序集使用RestSharp,而該程序又依賴於JSON.NET。我試着將對System.Runtime.Serialization的引用直接添加到正在測試的程序集中,但這也失敗了。

有什麼建議嗎?

更新:我試圖跟蹤下面的評論中建議的文件,但Filemon已經退役。它的替代品Process Explorer並沒有什麼幫助,因爲它似乎只顯示當前由devenv.exe進程保持打開的文件。搜索對有問題的文件的引用只會產生兩個不相關的引用。有沒有辦法看到我的測試運行的記錄,所以我可以告訴它在哪裏尋找.dll?

更新2:感謝您的建議。我通過使用Nuget將RestSharp和JSON.NET引用直接添加到單元測試項目中,從而解決了IO問題。現在我發現了以下錯誤:

Error 5 Test 'MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession' failed: System.InvalidProgramException : Common Language Runtime detected an invalid program. 
at System.Xml.Linq.XDocument..ctor() 
at RestSharp.Serializers.XmlSerializer.Serialize(Object obj) 
at RestSharp.RestRequest.AddBody(Object obj, String xmlNamespace) 
at RestSharp.RestRequest.AddBody(Object obj) 
at MyProject.Service.Service.TaskService.Save(Task task, ISession session) in C:\MyProject\MyProject.Service\Service\TaskService.cs:line 34 
at MyProject.Tests.Unit.Service.TaskServiceTests.Save_CallsWebService_WhenCalledWithTaskAndSession() in C:\MyProject\MyProject.Tests.Unit\Service\TaskServiceTests.cs:line 43 C:\MyProject\MyProject.Service\Service\TaskService.cs 34 

搜索網絡上的這一項主要是返回到TFS發展提供參考。大。

+1

使用Filemon實用程序(由Sysinternals的),看看是怎麼回事,其中一個進程試圖找到提到的文件。 – sll

+2

您可以嘗試從C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ Profile \ WindowsPhone71 \ System.Runtime.Serialization.dll本地複製它,然後確保項目引用是本地。 –

回答

6

對於單元測試項目的WP7項目引用中的所有系統程序集,將「Copy Local」設置爲true。我們在我們的項目中使用了Netwonsoft的Json和NUnit,沒有任何問題。

乾杯, 喬恩

相關問題