2017-02-12 2 views
3

私は、.netコアを使用してAPIを作成しています。 私のメソッドの1つは、新しいレコードを挿入するPOSTです。成功した応答は201 Createdを返します。 .netではヘルパーCreatedResultを使うことができます。ユニットテストUrl.netコアのリンク

return Created(new Uri(Url.Link("get_method", new { id = record.id })), record); 

これは正しいLocationヘッダーが設定された201応答を返します。 Locationヘッダーは着信要求を使用して、ホスト名を使用してURLを構築します。

.net webapi2でユニットテストをすると、カスタムHttpRequestMessageを作成してホスト名を自分で設定することができました。今、これは新しい.netコアフレームワークでは消えたようです。

着信要求を模擬して、単体テストを行い、有効なLocationヘッダーを作成する方法を教えてください。

私はコントローラのHttpContextでHttpRequestを嘲笑する必要があると信じています。

UserController controller = new UserController(); 
controller.ControllerContext.HttpContext.Request = ? 

このリクエストパラメータを模擬するにはどうすればよいですか?これは読み取り専用のプロパティです。

答えて

3

を使用今Url.Linkは、コントローラ内部で呼び出されたとき、それは私のhttps://localhost

を返します。
0

Githubのasp.netコアの単体テストを確認して、あなたのニーズに合ったものを見つけてください。彼らのテストは私がIUrlHelper

Mock<IUrlHelper> urlHelper = new Mock<IUrlHelper>(); 
urlHelper.Setup(x => x.Link(It.IsAny<string>(), It.IsAny<object>())).Returns("http://localhost"); 

UserController controller = new UserController(); 
controller.Url = urlHelper.Object 

を模擬するために必要なことがわかった部品番号

@Nkosiに続き
// Arrange 
var controller = new UserController(); 

var request = Mock.Of<HttpRequest>(); 
var httpContext = new Mock<HttpContext>(); 
httpContext 
    .Setup(c => c.Request) 
    .Returns(request); 

controller.ControllerContext.HttpContext = httpContext.Object; 

// Act 
//... 
関連する問題