2017-10-11 148 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); 

    } 
相關問題