Asp.net mvc 如何测试';补丁';Web API 2控制器中的操作?

Asp.net mvc 如何测试';补丁';Web API 2控制器中的操作?,asp.net-mvc,unit-testing,controller,asp.net-web-api2,patch,Asp.net Mvc,Unit Testing,Controller,Asp.net Web Api2,Patch,我有一个基本的测试用例,它把一个Delta对象放在一起,传递给我的控制器的“补丁”动作,我能够成功地完成这个动作。我的测试代码如下 [TestMethod] public async Task Patch_Product() { // Act var delta = new Delta<Product>(typeof(Product)); delta.TrySetPropertyValue("Name", "Patche

我有一个基本的测试用例,它把一个Delta对象放在一起,传递给我的控制器的“补丁”动作,我能够成功地完成这个动作。我的测试代码如下

[TestMethod]
    public async Task Patch_Product()
    {
        // Act
        var delta = new Delta<Product>(typeof(Product));
        delta.TrySetPropertyValue("Name", "PatchedProduct");
        delta.TrySetPropertyValue("Comment", "A test Product that has been patched");

        var result = await productController.Patch(1, delta);

        // Assert
        Assert.IsNotNull(result);
    }
Validate(patch.GetEntity());
它失败,出现以下异常:System.InvalidOperationException:ApicController。配置不能为null。

我验证了ApiController.Configuration对于我的所有其他测试以及GET、POST、DELETE等测试实际上都是空的。但是这些控制器操作都没有调用“Validate()”方法,而该方法正是引发此异常的地方。以前有人遇到过这种情况吗?有没有一种方法可以通过模拟上下文来测试补丁工作

在我的测试中,我也尝试通过一个空白配置,如下所示:

productController.Configuration = new HttpConfiguration();
但这似乎也不起作用。我得到一个例外:


System.IO.FileNotFoundException:无法加载文件或程序集“Newtonsoft.Json,版本=6.0.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”或其依赖项之一。系统找不到指定的文件。

以下内容在MVC5 WebApi2项目中对我有效:

//----- Test the patch
XXXController controller = new XXXController();
HttpConfiguration configuration = new HttpConfiguration();
HttpRequestMessage request = new HttpRequestMessage();
controller.Request = request;
controller.Request.Properties["MS_HttpConfiguration"] = configuration;

Delta<Shipment> patch = new Delta<XXEntity>();
patch.TrySetPropertyValue("Id", xx.Id);
patch.TrySetPropertyValue("Notes", "Test Comment");

controller.Patch(xx.Id, patch);
/----测试补丁程序
XXXController控制器=新的XXXController();
HttpConfiguration=新的HttpConfiguration();
HttpRequestMessage请求=新建HttpRequestMessage();
controller.Request=请求;
controller.Request.Properties[“MS_HttpConfiguration”]=配置;
三角形面片=新的三角形();
TrySetPropertyValue(“Id”,xx.Id);
TrySetPropertyValue(“注释”、“测试注释”);
控制器补丁(xx.Id,补丁);
这是基于中预先安排的CHAOS的信息(这表明这是一个MVC4解决方案,可能存在更好的WebApi2解决方案)

在寻找我的解决方案的过程中,我还发现了一个相关的问题,如果您对Url有问题,这个问题可能会很有用(我没有):