2017-10-11 1 views
0

私はasp.netコア2.0プロジェクトを持っています。私はVisual Studio 2017でビルドしています。私はasp.netコアプロジェクトをテストしてロープを学んでいます私はコントローラ内でHHTPGETメソッドをテストする方法が不思議です。
以下は私の初期コントローラです。Xunitでasp.net core 2.0プロジェクトをテストする方法http32をテストする方法

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

それぞれの取得方法について、結果がどのように戻ってくるかテストしたいですか? –

+0

@ RJ-まず、エラーを返さないことをテストしたいと思います。基本的なもの。 – yams

+0

このリンクをたどってみてください。[既存のans](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); 

    } 
関連する問題