私は WebApi2 を使用してプロジェクトに取り組んでいます。私のテスト プロジェクトでは、Moq と XUnit を使用しています。
これまでのところ、API のテストは、GET のようなものを実行するのは非常に簡単でした。
[Fact()]
public void GetCustomer()
{
var id = 2;
_customerMock.Setup(c => c.FindSingle(id))
.Returns(FakeCustomers()
.Single(cust => cust.Id == id));
var result = new CustomersController(_customerMock.Object).Get(id);
var negotiatedResult = result as OkContentActionResult<Customer>;
Assert.NotNull(negotiatedResult);
Assert.IsType<OkNegotiatedContentResult<Customer>>(negotiatedResult);
Assert.Equal(negotiatedResult.Content.Id,id);
}
ここで、リクエスト ヘッダーから値にアクセスする必要がある、少し複雑な作業に移ります。
IHttpActionResult を拡張して、独自の Ok() 結果を作成しました
public OkContentActionResult(T content,HttpRequestMessage request)
{
_request = request;
_content = content;
}
これにより、リクエストからヘッダー値を読み取る小さなヘルパーを作成できます。
public virtual IHttpActionResult Post(Customer customer)
{
var header = RequestHeader.GetHeaderValue("customerId", this.Request);
if (header != "1234")
ダミーのリクエストでMoqをセットアップするにはどうすればよいですか?
過去 1 時間ほどかけて、webapi でこれを実行できる例を探しましたが、何も見つからないようです。
これまでのところ...そして、APIにとっては間違っていると確信していますが、私は持っています
// arrange
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var headers = new NameValueCollection
{
{ "customerId", "111111" }
};
request.Setup(x => x.Headers).Returns(headers);
request.Setup(x => x.HttpMethod).Returns("GET");
request.Setup(x => x.Url).Returns(new Uri("http://foo.com"));
request.Setup(x => x.RawUrl).Returns("/foo");
context.Setup(x => x.Request).Returns(request.Object);
var controller = new Mock<ControllerBase>();
_customerController = new CustomerController()
{
// Request = request,
};
過去にモック HttpRequestBase をセットアップする必要がなかったため、次に何をする必要があるかはよくわかりません。
誰かが良い記事を提案したり、私を正しい方向に向けたりできますか?
ありがとうございました!!!