2010-08-20 3 views
0

Я работаю на модульного тестирования в проекте, используя MOQ-рамки, C# 4.0, MVC2.0C, не удалось загрузить файл или сборку при выполнении теста

тест похож на один ниже. Но как только я запускаю этот тест, я получаю странную ошибку. Я проверил все связанные сборки System.Web.mvc и там все в версии 2.0.0, поэтому мне кажется, что они не могут вызвать проблему.

[TestMethod] 
     public void PaymentStepOne_Should_Return_RedirectUrl_Because_CustomerId_In_Session_Is_Null() 
     { 
      var _mockFrontendWebshopController2 = new Mock<FrontendWebshopController> 
      (                    
       _mockCartItemService.Object, _mockCartService.Object,                           
       _mockOrderService.Object, _mockCustomerService.Object,                    
       _mockVariantService.Object, _mockShippingCostService.Object,                    
       _mockNodeService.Object, _mockPageSettingService.Object, 
       _mockUserProfileService.Object) { CallBase = true }; 

      var config = ConfigurationManagerHelper.GetConfigurationManager(new DefaultSettings()); 
      _mockFrontendWebshopController2.Setup(x => x.GetConfigurationManager()).Returns(config); 

      var webshopController = _mockFrontendWebshopController2.Object; 


      webshopController.SetFakeControllerContext(); 
      webshopController.Response.Redirect("http://www.google.nl"); 

      var idToUse = Guid.NewGuid(); 
      var collection = new FormCollection { { "Id", idToUse.ToString() }, { "Amount_" + idToUse, "99" } }; 
      var actual = (RedirectResult)webshopController.PaymentStepOne(collection); 

      Assert.AreEqual("http://www.google.nl", actual.Url); 
     } 

Я ожидаю, что метод для возвращения URL в этом сценарии, который должен храниться в переменной, которая называется «фактической». Но всякий раз, когда я запускаю тест, я получаю следующее сообщение об ошибке;

Test method Plugin.Webshop.Tests.FrontendWebshopControllerTest.PaymentStepOne_Should_Return_RedirectUrl_Because_CustomerId_In_Session_Is_Null threw exception: 
System.IO.FileNotFoundException: Could not load file or assembly 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Het systeem kan het opgegeven bestand niet vinden.Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 
Running under executable C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\QTAgent32.exe 
--- A detailed error log follows. 

=== Pre-bind state information === 
LOG: User = rob 
LOG: DisplayName = System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
(Fully-specified) 
LOG: Appbase = file:///C:/Projects/Website_v1\SITE/TestResults/WSRob 2010-08-20 14_00_26/Out 
LOG: Initial PrivatePath = NULL 
Calling assembly : Plugin.Webshop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\Projects\IWES5\IWES\TestResults\WSRob 2010-08-20 14_00_26\Out\Plugin.Webshop.Tests.DLL.config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
LOG: Attempting download of new URL file:///C:/Projects/Website_v1\SITE/TestResults/WSRob 2010-08-20 14_00_26/Out/System.Web.Mvc.DLL. 
LOG: Attempting download of new URL file:///C:/Projects/Website_v1\SITE/TestResults/WSRob 2010-08-20 14_00_26/Out/System.Web.Mvc/System.Web.Mvc.DLL. 
LOG: Attempting download of new URL file:///C:/Projects/Website_v1\SITE/TestResults/WSRob 2010-08-20 14_00_26/Out/System.Web.Mvc.EXE. 
LOG: Attempting download of new URL file:///C:/Projects/Website_v1\SITE/TestResults/WSRob 2010-08-20 14_00_26/Out/System.Web.Mvc/System.Web.Mvc.EXE. 

Эта ошибка встречается, когда функция, которую я хочу, чтобы проверить, что называется, так что это произойдет, как только следующее правило попадания теста;

var actual = webshopController.PaymentStepOne(collection); 

вместе с сообщением об ошибке я получаю следующее Трассировка стека

Plugin.Webshop.Controllers.FrontendWebshopController.PaymentStepOne(FormCollection collection) 
FrontendWebshopControllerProxy3eebc7d7c86c40848deab621477897c6.InvocationPaymentStepOne_9.InvokeMethodOnTarget() 
Castle.DynamicProxy.AbstractInvocation.Proceed() 
Moq.Interceptor.Intercept(IInvocation invocation) 
Castle.DynamicProxy.AbstractInvocation.Proceed() 
FrontendWebshopControllerProxy3eebc7d7c86c40848deab621477897c6.PaymentStepOne(FormCollection collection) 
Plugin.Webshop.Tests.FrontendWebshopControllerTest.PaymentStepOne_Should_Return_RedirectUrl_Because_CustomerId_In_Session_Is_Null() in C:\Projects\Website_v1\SITE\Plugin.Webshop.Tests\FrontendWebshopControllerTest.cs: line 197 

Пожалуйста помочь, найти причину этой ошибки и ее решения.

+0

Глупый вопрос, но имеет ли ваш тест ссылку на System.Web.MVC? Кроме того, вы можете попытаться создать проект тестирования модуля вне контроллера, щелкнув правой кнопкой мыши метод и выбрав «Создать тесты единиц измерения». Таким образом, вы можете быть уверены, что проект настроен правильно. –

+0

@Igor Как также ответил Джон. Да, ссылки есть. Я получаю базовые тесты, созданные, потому что я использовал мастер тестирования модулей, чтобы добавить тесты, поэтому я уверен, что проблема не может быть в ссылках. – Rob

+0

Есть ли у вас смесь сборок, скомпилированных под x86 и x64? –

ответ

0

Я решил проблему. Функция, которую я тестирую, использовала XVal для создания правил. Я знаю, что xval еще не работает с MVC2, и он использует компоненты из MVC1. И поскольку я работал над недавно установленной машиной, MVC1 еще не установлен. Поэтому я загрузил MVC1, и после установки мой тест был успешным.

Одна вещь по-прежнему странная. Другие тесты, в которых мои коллеги и я тестировали бросок RulesExceptions, все время преуспевали. Итак, почему этот тест не был без установки MVC1, по-прежнему остается для меня большим вопросом. Если кто-нибудь скажет мне, почему я был бы рад это услышать.

Спасибо, что помогли мне и подумали!

1

У вас есть ссылка на сборки MVC от вашего проекта , а также от вашего производственного проекта? Ссылочные ссылки не обрабатываются транзитивно.

+0

Да все необходимые ссылки сделаны – Rob

+0

@Rob: Итак, если вы посмотрите в выходной каталог для своей тестовой сборки, вы увидите System.Web.Mvc.dll? (Или это в GAC? Я никогда не помню ...) –

+0

Я не вижу DLL в выходном каталоге. Так что я думаю, что это происходит от GAC – Rob

Смежные вопросы