2017-08-18 14 views
1

ユニットテストの一環として、HTTPフォームデータを本体として含む模擬コードIOwinRequestを作成しようとしています。問題のコードは、(私が成功したWebブラウザを介して送信されたリクエストからフォームデータを読み取ることができます)生産で動作しますが、私はユニットテストで間違ってやっているのか理解できません。ユニットテストでOwinRequestにフォームデータを書き込む

[TestMethod] 
public async Task TestPostData() 
{ 
    String rawFormData = "test=testValue&test2=testValue2"; 
    MemoryStream stream = new MemoryStream(); 

    using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8, 4 * 1024, true)) 
     await writer.WriteAsync(rawFormData); 

    stream.Seek(0, SeekOrigin.Begin); 

    Mock<IOwinRequest> requestMock = new Mock<IOwinRequest>(); 
    requestMock.SetupGet(r => r.Method).Returns("POST"); 
    requestMock.SetupGet(r => r.Body).Returns(stream); 
    requestMock.SetupGet(r => r.ContentType).Returns("application/x-www-form-urlencoded"); 

    Assert.IsNotNull(await requestMock.Object.ReadFormAsync()); 
} 

フォームReadFormAsyncメソッドから返されたオブジェクトはnullです。私は何が欠けていますか?これはオンになっています.Net4.5とMicrosoft.Owin 3.0.1

+0

これは解決されましたか? – Nkosi

答えて

0

あなたはこのメソッドを設定していないので、呼び出されると明らかにnullが返されます。

[TestMethod] 
public async Task _TestPostData() { 
    var dictionary = new Dictionary<string, string[]>() { 
     { "test", new[]{"testValue"}}, 
     { "test2", new[]{"testValue2"}}, 

    }; 
    String rawFormData = "test=testValue&test2=testValue2"; 
    var stream = new MemoryStream(); 

    using (var writer = new StreamWriter(stream, Encoding.UTF8, 4 * 1024, true)) 
     await writer.WriteAsync(rawFormData); 

    stream.Seek(0, SeekOrigin.Begin); 

    var formMock = new Mock<IFormCollection>(); 
    formMock.Setup(_ => _.GetEnumerator()).Returns(() => dictionary.GetEnumerator()); 
    var readableString = formMock.As<IReadableStringCollection>(); 
    //..setup as desired 

    var requestMock = new Mock<IOwinRequest>(); 
    requestMock.Setup(_ => _.Method).Returns("POST"); 
    requestMock.Setup(_ => _.Body).Returns(stream); 
    requestMock.Setup(_ => _.ContentType).Returns("application/x-www-form-urlencoded"); 
    requestMock.Setup(_ => _.ReadFormAsync()).ReturnsAsync(formMock.Object); 

    Assert.IsNotNull(await requestMock.Object.ReadFormAsync()); 
} 

しかし、この質問はXY problemのように見えます。この答えで私が提供できる設定に関してはそれほど多くはありません。

関連する問題