2015-05-31 50 views
1

這是我的控制器,它返回一個JSON。在Nunit中測試JsonResult的幫助方法

public JsonResult GetValues() 
{ 
    return Json(
    new{ 
     title = new { 
      text = "Hello World" 
     }, 
     xAxis = new { 
      type = "List of countries" 
      labels = new { 
       rotation = 90 
      } 
     } 
    },JsonRequestBehavior.AllowGet); 
} 

而在我的NUnit的,我測試如下:

[Test] 
    public void TestGetValues() 
    { 
     var controller = new HelloWorldController(); 
     var values = controller.GetValues() as JsonResult; 

     Assert.IsNotNull(data); 
     var title = values.Data.GetType().GetProperty("title") 
        .GetValue(values.Data,null); 
     var text = title.GetType().GetProperty("text").GetValue(title); 
     Assert.IsNotNull(text); 

    } 

這工作得很好,但我一定要考的幾個方法有哪些需要我一遍又一遍寫同樣的事情,同樣的性質再次。如何編寫一個幫助器方法,以便我可以傳入控制器和要測試的屬性。 類似這樣的:

var checkText = GetJSonProperties(controllername, "data/title/text"); 
var checkXais = GetJSonProperties(controllernmae, "data/xAxis/Type"); 

我該如何做到這一點?

回答

1

我只是使用動態類型。

var controller = new HelloWorldController(); 
dynamic values = controller.GetValues(); 

var title = (string)values.title; 

保存你寫的幫助方法,它們本身可能需要測試!

+0

我已經試過這種方法,但我不能以這種方式訪問​​屬性。它給了我錯誤「對象」不包含'標題'的定義「我也使它可見。 [assembly:InternalsVisibleTo(「HelloWorldTests.dll」)] 任何想法,我可能會做錯嗎? – siddhipur

+0

我假設你使用的是MVC控制器,而不是WebApi控制器,對吧? – Padraic

+0

是的,我正在使用MVC控制器 – siddhipur