Тестирование ложного ввода в методе C # - PullRequest
0 голосов
/ 14 января 2019

Итак, я пытаюсь протестировать метод, который берет название города и вызывает веб-API OpenWeatherMap, вводя поддельное название города, но я абсолютно не знаю, как это сделать, поскольку все примеры, с которыми я сталкивался до сих пор, имеют проверял классы вместо методов.

Как мне передать ложное название города методу? Кроме того, метод для вызова API возвращает задачу, так как я могу проверить строку вывода?

Я совершенно новичок в области тестирования, поэтому любая помощь будет высоко ценится. Я также включил сюда свой код метода.

    static void Main()
    {
        string output;

        //Declare variables
        string strUserLocation;

        //Prompt user for city name
        Console.Write("Enter your city name: ");
        strUserLocation = Console.ReadLine();

        try
        {
            //Retrieve data from API
            Task<string> callTask = Task.Run(() => CallWebAPI(strUserLocation));
            callTask.Wait();

            //Get the result
            output = callTask.Result;
            Console.WriteLine(output);

            if(output == "Invalid city name. \n")
            {
                Main();
            }

            else
            {
                //Quit application
                Console.WriteLine("Press the ENTER key to quit the application.");
                Console.ReadLine();
            }
        }

        catch (Exception)
        {
            Console.WriteLine("Invalid city name. \n");
            Main();
        }
    }//end Main


    //Method to call OpenWeatherMap API
    static async Task<string> CallWebAPI(string location)
    {
        using (HttpClient client = new HttpClient())
        {
            //Set base URI for HTTP requests
            client.BaseAddress = new Uri("http://api.openweathermap.org/data/2.5/weather"); 

            //Tells server to send data in JSON format
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            string strLocation = location;
            string strKey = "keyplaceholder123";

            //Send request and await response from server
            HttpResponseMessage response = await client.GetAsync("?q=" + strLocation + "&APPID=" + strKey);

            if(response.StatusCode == HttpStatusCode.OK)
            {
                CurrentWeather weather = response.Content.ReadAsAsync<CurrentWeather>().Result;

                //Convert temperature from Kelvin to Fahrenheit
                float temp = weather.main.temp * 1.8f - 459.67f;
                string strTempFahrenheit = temp.ToString("n0");

                //Display output
                return "The temperature in " + weather.name + " is " + strTempFahrenheit + "°F. \n";
            }

            else
            {
                return "Invalid city name. \n";
            }
        }//end using
    }//end CallWebAPI

Тест, который у меня есть до сих пор

    using System;
    using TechnicalExercise;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    namespace TechnicalExercise.Test
    {
        [TestClass]
        public class InputTest
        {
                [TestMethod]
                public void UserInput_EnterFakeCity_ReturnError()
                {
                    //Arrange
                    string strFakeCity = "Fake Lake City";
                    string expected = "Invalid city name. \n";
                    string actual;

                    //Act - Retrieve data from API
                    Task<string> callTask = Task.Run(() => CallWebAPI(strFakeCity));
                    callTask.Wait();
                    actual = callTask.Result;

                    //Assert - Checks if the actual result is as expected
                    Assert.Equals(actual, expected);
                }
            }
        }

1 Ответ

0 голосов
/ 14 января 2019

Просто, если вы еще не поняли, вот код! Я также рекомендовал бы вам взглянуть на асинхронное ожидание и задачу, потому что эти вещи могут быть сложными!

Обратите внимание на Task<string> и returns вместо output =

    static async Task<string> CallWebAPI(string location)
    {
        //string output;

        using (HttpClient client = new HttpClient())
        {
            //Set base URI for HTTP requests
            client.BaseAddress = new Uri("http://api.openweathermap.org/data/2.5/weather");

            //Tells server to send data in JSON format
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            string strLocation = location;
            string strKey = "427hdh9723797rg87";

            //Send request and await response from server
            HttpResponseMessage response = await client.GetAsync("?q=" + strLocation + "&APPID=" + strKey);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                CurrentWeather weather = response.Content.ReadAsAsync<CurrentWeather>().Result;

                //Convert temperature from Kelvin to Fahrenheit
                float temp = weather.main.temp * 1.8f - 459.67f;
                string strTempFahrenheit = temp.ToString("n0");

                //Display output
                return "The temperature in " + weather.name + " is " + strTempFahrenheit + "°F. \n";
            }

            else
            {
                return "Invalid city name. \n";
                //Console.WriteLine(output);
                Main();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...