2017-10-11 3 views
0

Ich habe ein asp.net Core 2.0 Projekt Ich baue in Visual Studio 2017. Ich lerne die Seile mit dem Testen eines asp.net Kernprojekts aber ich frage mich, wie ich die HHTPGET-Methoden in meinem Controller testen kann.
Unten ist mein anfänglicher Controller.Testing asp.net Core 2.0-Projekt mit Xunit, wie httpget zu testen

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

Nur frage mich, wenn jemand ein Beispiel dafür, wie diese Strecken zu testen geben könnte oder HTTPGets ...

+0

für jede Get-Methode, die Sie testen möchten, was wird das Ergebnis sein, das es zurückgibt? –

+0

@ RJ- Um zu beginnen würde ich gerne testen, dass diese keine Fehler zurückgeben. Etwas Grundlegendes. – yams

+0

Bitte folgen Sie diesem Link, vielleicht wird es für Sie hilfreich sein. [Existing ans] (https://stackoverflow.com/questions/37475387/unit-testing-integration-testing-web-api-with-httpclient-in-visual- Studio-2013) –

Antwort

0

So fand ich, dass der erste Schritt zum Aufbau ist ein Mock-Verbindung, die etwas generisch ist, so habe ich Eine Methode, um die Verbindung zu einem Server über die unten beschriebene Methode nachzuahmen.

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

    } 

Dann als Beispiel habe ich einen Test einrichten unten, dass nur den Statuscode überprüft und bestätigt das Objekt von der Steuerung der Rückkehr nicht null ist.

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

    } 
Verwandte Themen