【问题标题】:Testing asp.net core 2.0 project with Xunit how to test httpget用Xunit测试asp.net core 2.0项目如何测试httpget
【发布时间】:2017-10-11 21:55:17
【问题描述】:

我有一个在 Visual Studio 2017 中构建的 asp.net core 2.0 项目。我正在学习测试 asp.net 核心项目的技巧,但我想知道如何在我的内部测试 HHTPGET 方法控制器。
下面是我的初始控制器。

public class ValuesController : Controller
{
    private Config MyConfig { get; }

    private Solr Solr { get; }

    private Voyager Voyager { get; }

    private Messages Messages { get; }

    public ValuesController(Config config, Solr solr, Voyager voyager, Messages messages)
    {
        MyConfig = config;
        Solr = solr;
        Voyager = voyager;
        Messages = messages;
    }

    // GET api/values
    [HttpGet]
    [Route("/api/[Controller]")]
    public IEnumerable<string> Get()
    {
        string version = ".NET Framework: " + Environment.Version.ToString();
        string vers = "ASP.NET Core Framework: " + typeof(Controller).Assembly.GetName().Version.ToString();
        return new string[] { version, vers };
    }

    [HttpGet]
    [Route("/api/[Controller]/config")]
    public JsonResult GetConfig()
    {
        return new JsonResult(MyConfig);
    }

    [HttpGet]
    [Route("/api/[Controller]/solr")]
    public JsonResult GetSolr()
    {
        return new JsonResult(Solr);
    }

    [HttpGet]
    [Route("/api/[Controller]/voyager")]
    public JsonResult GetVoyager()
    {
        return new JsonResult(Voyager);
    }

    [HttpGet]
    [Route("/api/[Controller]/messages")]
    public JsonResult GetMessages()
    {
        return new JsonResult(Messages);
    }

只是想知道是否有人可以举例说明如何测试这些路由或 HTTPGets...

【问题讨论】:

  • 对于您要测试的每个 get 方法返回的结果是什么??
  • @RJ- 首先我想测试那些不会返回错误。一些基本的东西。
  • 请点击此链接,也许对您有帮助。existing ans

标签: c# xunit asp.net-core-2.0


【解决方案1】:

所以我发现第一步是设置一个有点通用的模拟连接,所以我创建了一个方法来通过下面的方法模拟与服务器的连接。

    private CollectionsController SetupController()
    {
        if (controller != null)
        {
            controller = null;
        }
        if (controllerContext != null)
        {
            controllerContext = null;
        }
        controller = new CollectionsController();
        controller.ControllerContext = new ControllerContext();
        controllerContext = controller.ControllerContext;
        controllerContext.HttpContext = new DefaultHttpContext();
        //The header below is generic don't really care what the device id is
        controllerContext.HttpContext.Request.Headers["device-id"] = "20317";

    }

然后作为一个例子,我在下面设置了一个测试,它只检查状态代码并断言从控制器返回的对象不为空。

    [Fact]
    public void TestPostCollectionName()
    {
        valData = new ValData();
        valData.value = "NewObject";
        controller = SetupController();
        var results = controller.PostCollectionName(valData, testCollecName);
        Assert.NotNull(results);
        Assert.True(controllerContext.HttpContext.Response.StatusCode == 200);

    }

【讨论】:

  • 谢谢你,为我节省了很多时间
  • @r.mirzojonov 很高兴我能帮助到某人。
猜你喜欢
  • 2018-05-27
  • 2018-02-20
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多