2017-10-11 172 views
0

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

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 ...

+0

对于每个get方法,你想测试它将返回的结果是什么? –

+0

@ RJ-首先,我想测试那些不会返回错误。基本的东西。 – yams

+0

请按照这个链接,也许它会对你有帮助。[现有答案](https://stackoverflow.com/questions/37475387/unit-testing-integration-testing-web-api-with-httpclient-in-visual-工作室-2013) –

回答

0

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

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"; 

    } 

然后作为一个例子,我在下面建立了一个测试,它只是检查状态码并声明从控制器返回的对象不是null。

[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); 

    } 
相关问题