繁体   English   中英

C# 单元测试错误,运行测试时无法加载文件或程序集

[英]C# Unit Test error, could not load file or assembly when running test

我正在使用 MOQ 框架、C# 4.0、MVC2.0 在项目中进行单元测试

测试类似于下面的测试。 但是一旦我运行这个测试,我就会收到一个奇怪的错误。 我已经检查了所有引用的 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,该 URL 应该存储在名为“actual”的变量中。 但是每当我运行测试时,我都会收到以下错误消息;

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

请通过查找此错误的原因并解决它来提供帮助。

您是否从测试项目和生产项目中引用了 MVC 程序集? 程序集引用不会传递处理。

我解决了这个问题。 我正在测试的函数是使用 XVal 来抛出 RulesExceptions。 我知道 xval 还不能与 MVC2 一起使用,它使用来自 MVC1 的组件。 由于我在新安装的机器上工作,MVC1 还没有安装。 所以我下载了MVC1,安装后我的测试成功了。

有一件事还是很奇怪。 我和我的同事正在测试抛出 RulesExceptions 的其他测试确实一直成功。 那么为什么这个测试没有安装MVC1对我来说仍然是一个大问题。 如果有人能告诉我为什么我会很高兴听到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM