Как написать кейсы для веб-хуков в c#? - PullRequest
0 голосов
/ 15 января 2020

У меня есть веб-страница, которая получает запрос веб-ловушки, и я хочу написать тестовые примеры для модулей (NUnit framework) для этой веб-ловушки. Я хочу смоделировать запрос веб-перехвата (Post request) в модульных тестах и ​​передать заголовки запроса и тело в виде Json data на веб-страницу, которая получает запрос.

Имя веб-страницы

/webhook/receiveWebHook.aspx

Заголовки запроса

Content-Type: application/json
messageType: TestInsertNotification

Тело запроса (Json данные)

{ 
   "Alias":"Test",
   "TransactionID":"123"
}

Код на веб-странице:

protected void Page_Load(object sender, EventArgs e)
{
      if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
      {
           object notification = null;
           string message = string.Empty;

           Int32 pID = InsertHTTPRequest(HttpContext.Current.Request); //Generate id in DB

           if (pID > 0 && this.Request.ContentType == "application/json")
           {
                StreamReader sr = new StreamReader(this.Request.InputStream, this.Request.ContentEncoding);
                message = sr.ReadToEnd();
                TextReader content = new StreamReader(new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(message)));
                JToken json = JToken.Load(new JsonTextReader(content));
                notification = new JsonSerializer().Deserialize(new JTokenReader(json), this.GetTypeOfMessage(HttpContext.Current.Request.Headers("MessageType")));   
           }
            if (notification != null)
            {
                 if (notification is InsertNotification)
                 {
                      InsertNotification insertNotification = notification as InsertNotification;
                      DbInsertMethod(pID, message, insertNotification);
                 }
            }
      }
}

Может кто-нибудь помочь, как выполнить модульное тестирование для веб-хуков в c#? Также, пожалуйста, предложите, как передать HTTP Post запрос из метода юнит-теста с заголовком и телом (содержащим Json данные)?

PS: В настоящее время я использую Postman для проверки работоспособности этого webhook.

1 Ответ

0 голосов
/ 21 января 2020

Попробуйте использовать библиотеку RestSharp . Для вашего случая это выглядит так:

[TestFixture]
public class TestWebApp
{
    [Test]
    public void TestRequest()
    {
        IRestClient client = new RestClient($"{BaseUrl}/webhook/receiveWebHook.aspx");
        var request = new RestRequest(Method.POST);
        request.AddHeader("Content-Type", "application/json");
        request.AddHeader("messageType", "TestInsertNotification");
        JObject jObjectbody = new JObject();
        jObjectbody.Add("Alias", "Test");
        jObjectbody.Add("TransactionID", "123");
        request.AddParameter("application/json", jObjectbody, ParameterType.RequestBody);
        var response = client.Execute(request);
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }
}
...