2016-11-28 4 views
1

に私は、文字列は以下のJSONあるタスクを返すために、ユニットテストのための一番上の行にReadAsStringAsyncを模擬しようとしている:変換有効なJSONタスク<string>

私はこれが有効な変換するにはどうすればよい
var jsonString = await response.Content.ReadAsStringAsync(); 
// convert to our OfferJsonRow format 
var jsonData = JsonConvert.DeserializeObject<Dictionary<string, List<OfferJsonRow>>>(jsonString); 
var rawOfferData = jsonData["data"]; 

JSONをTask<string>に変更しますか?

JSON:ここ

{ 
    "data": [{ 
     "Latitude": "xxx", 
     "RedemptionType": "barcode", 
     "Version": "1", 
     "HeaderType": "", 
     "FontColour": "", 
     "LogoType": "", 
     "RedemptionLimit": "", 
     "RedemptionTimeMinutes": "" 
    }] 
} 

が私のコードです:

var response = new Mock<HttpResponseMessage>(); 
response.Setup(rm => rm.Content.ReadAsStringAsync()).Returns(Task.Delay(10).ContinueWith(t => "Hello")); 

私はJSONと「こんにちは」を置き換えるならば、それは私が何をしたいだろうが、貼り付け時にエラーがスローされますと信じてそのJSONをVisual Studioにコード

+0

あなたはおそらくそれを貼り付けたときに、私のだろう引用符をエスケープしていません最初の推測 – Rob

+0

@Rob Yeah。それは必要なのですか?私のJSONは実際には巨大で、ここに入力したものよりはるかに大きい – BeniaminoBaggins

+0

'Task 'を返す代わりに 'Task'を返す必要があります。あなたは 'Task.FromResult(" Hello ");' – Fabio

答えて

0

コメントが示唆しているように、私はJSONを最初にエスケープして、ビジュアルスタジオに受け入れなければなりませんでした。例:次に

var JSONString = ""Longitude"": ""xxx"", 
      ""Latitude"": ""-xxx"", 
      ""RedemptionType"": ""barcode"", 
      ""Version"": ""1"", 
      ""HeaderType"": """", 
      ""FontColour"": """", 
      ""LogoType"": """", 
      ""RedemptionLimit"": """", 
      ""RedemptionTimeMinutes"": """" 
     }] 
    }"; 

クライアントコードが予想されることをJSON文字列としてそれを使用するために、私はそれをアンエスケープする必要がありました:Task<string>については

var unescapedjson = Regex.Unescape(JSONString); 

、それはHttpResponseMessageを模擬するために不要になったので必要ではなかった。

私は本当のHttpResponseMessageを使用してunescapedjsonに手動でcontentフィールドを設定します。

var response = new HttpResponseMessage(); 
Microsoft.JScript.GlobalObject.unescape(JSONString); 
response.Content = new StringContent(unescapedjson); 

フルコード:

[Test] 
public async Task AllPartners_HasPartners_GetsThem() { 
var response = new HttpResponseMessage(); 
var unescapedjson = Regex.Unescape(JSONString); 
var unescapedjson2 = Microsoft.JScript.GlobalObject.unescape(JSONString); 
response.Content = new StringContent(unescapedjson); 
await _offersDataService.ProcessResponse(response); 
Assert.Greater(_offersDataService.AllPartners.Count, 0); 
} 
関連する問題