gpt4 book ai didi

asp.net - 我如何对实体集 Controller 进行单元测试

转载 作者:行者123 更新时间:2023-12-02 17:20:05 24 4
gpt4 key购买 nike

我尝试对 EntitySetController 进行单元测试。我可以测试 Get,但在测试 Post 方法时遇到问题。

我尝试了 SetODataPath 和 SetODataRouteName,但是当我调用 this.sut.Post(entity) 时,我收到很多关于缺少位置 header 、缺少 OData-Path、缺少路由的错误。

我已经无计可施了。有没有人成功测试过他们的 EntitySetController?

有人给我出主意吗?也许我应该只测试 EntitySetController 实现中 protected 重写方法?但我如何测试 protected 方法?

感谢您的帮助

最佳答案

也来这里寻找解决方案。这似乎有效,但不确定是否有更好的方法。

Controller 至少需要覆盖 CreateEntityGetKey:

public class MyController : EntitySetController<MyEntity, int>
{
protected override MyEntity CreateEntity(MyEntity entity)
{
return entity;
}

protected override int GetKey(MyEntity entity)
{
return entity.Id;
}
}

MyEntity 非常简单:

public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}

看起来你至少需要:+ 使用 URI 进行请求+ 请求 header 中的 3 个键:MS_HttpConfigurationMS_ODataPathMS_ODataRouteName+ 带有路由的 HTTP 配置

[TestMethod]
public void CanPostToODataController()
{
var controller = new MyController();

var config = new HttpConfiguration();
var request = new HttpRequestMessage();

config.Routes.Add("mynameisbob", new MockRoute());

request.RequestUri = new Uri("http://www.thisisannoying.com/MyEntity");
request.Properties.Add("MS_HttpConfiguration", config);
request.Properties.Add("MS_ODataPath", new ODataPath(new EntitySetPathSegment("MyEntity")));
request.Properties.Add("MS_ODataRouteName", "mynameisbob");

controller.Request = request;

var response = controller.Post(new MyEntity());

Assert.IsNotNull(response);
Assert.IsTrue(response.IsSuccessStatusCode);
Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
}

我不太确定 IHttpRoute,在 aspnet 源代码中(我必须链接到此来弄清楚这一切)测试使用此接口(interface)的模拟。因此,对于此测试,我只需创建一个模拟并实现 RouteTemplate 属性和 GetVirtualPath 方法。测试期间未使用界面上的所有其他内容。

public class MockRoute : IHttpRoute
{
public string RouteTemplate
{
get { return ""; }
}

public IHttpVirtualPathData GetVirtualPath(HttpRequestMessage request, IDictionary<string, object> values)
{
return new HttpVirtualPathData(this, "www.thisisannoying.com");
}

// implement the other methods but they are not needed for the test above
}

这对我有用,但是我真的不太确定 ODataPathIHttpRoute 以及如何正确设置它。

关于asp.net - 我如何对实体集 Controller 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com