[英]C# Unit Test - System.IO.FileNotFoundException: Could not load file or assembly
[英]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.