Тест NUnit завершается неудачно с System.IO.FileNotFoundExeption - PullRequest
4 голосов
/ 16 сентября 2011

Один из тестов NUnit в моем проекте Windows Phone 7 продолжает сбой со следующей ошибкой:

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  

Проблема вызвана методом расширения, который я написал для сериализации POCO в JSON с использованием JSON.NET. Похоже, что 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 непосредственно в проект модульного тестирования. Теперь я получаю следующую ошибку:

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 Ответ

6 голосов
/ 25 января 2012

Установите для параметра «Копировать локальный» значение true для всех системных сборок в ссылках на ваш проект WP7 для проекта модульного тестирования. В нашем проекте мы используем Json и NUnit от Netwonsoft без проблем.

Ура, Jon

...