1

Я новичок в написании модульного теста в визуальной студии. В моем веб-приложении у меня есть следующее содержание.Единичный тест для метода «Задача» с инъекцией зависимостей

1> Интерфейс

public interface IGettProxy 
{ 
    Task<List<CityDetails>> getCity(); 
    Task<List<CountryDetails>> getCountry(int cityId); 
} 

2> Контракты (реализация интерфейса)

public async Task<List<CityDetails>> getCity() 
    { 
     try 
     { 

      _serviceUrl = String.Format("{0}/Search/getCityinfo", _serviceUrl); 
      string requestUri = _serviceUrl; 
      client = new HttpClient(); 
      var response = await client.GetAsync(requestUri); 
      if (response.IsSuccessStatusCode) 
      { 
       string json = await response.Content.ReadAsStringAsync(); 
       var Result = new   JavaScriptSerializer().Deserialize<List<CityDetails>>(json); 
       return Result; 
      } 
      else 
      { 
       throw new Exception("Errorhandling message"); 
      } 
     } 
     catch (Exception ex) { throw ex; } 
    } 


    public async Task<List<CountryDetails>> getCountry(int cityId) 
    { 
     try 
     { 
      _serviceUrl = String.Format("{0}/Search/getcountryinfo?cityId={1}", _serviceUrl, cityId); 
      string requestUri = _serviceUrl; 
      client = new HttpClient(); 
      var response = await client.GetAsync(requestUri); 
      if (response.IsSuccessStatusCode) 
      { 
       string json = await response.Content.ReadAsStringAsync(); 
       var Result = new JavaScriptSerializer().Deserialize<List<CountryDetails>>(json); 
       return Result; 
      } 
      else 
      { 
       throw new Exception("Errorhandling message"); 
      } 
     } 
     catch (Exception ex) { throw ex; } 
    } 

3> Контроллер

 private IGettProxy igettProxy; 

    public GettController(IGettProxy gettProxy) 
    { 
     igettProxy = gettProxy; 
    } 

    /// <summary> 
    /// Invoked on Page Load 
    /// </summary> 
    /// <returns></returns> 
    public async Task<ActionResult> Getdet() 
    { 
     try 
     { 
      List<CityDetails> cityDetails = await igettProxy.getCity(); 
      SearchModel viewModel = new SearchModel(); 
      viewModel.cityDetail = cityDetails; 
      return View(viewModel); 
     } 
     catch (Exception ex) { throw ex; } 
    } 

    /// <summary> 
    /// Get Country list based on city information 
    /// </summary> 
    /// <param name="cityId"></param> 
    /// <returns></returns> 
    public async Task<JsonResult> getCountry (int cityId) 
    { 
     try 
     { 
      List<CountryDetails> CountryDetails = await iSearchProxy.getCountry(cityId); 
      return Json(CountryDetails,JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) { throw ex; } 
    } 

У меня разные библиотеки классов для элемента данных.

Для конфигурации впрыска я использую метод Unity.

Итак, в этом представлении у меня есть возможность привязать город, значения страны.

Для этого связующего я хочу написать модульный тест. Пожалуйста, помогите мне с этой деталью. Заранее спасибо.

Мой метод испытаний

[TestMethod] 
     public void bookAppointment() 
     { 

      List<CityDetails> cityDetails = new List<CityDetails>(); 
      cityDetails.Add(new CityDetails {ID=1,CityName="Delhi"}); 
      // var mockproxy = new StubISearchProxy(); 
      StubISearchProxy searchProxy = new StubISearchProxy(); 

      searchProxy.GetCity =() => cityDetails; 

      SearchController searchController = new SearchController(searchProxy); 
      var str = searchController.getCity(); 
     } 
+1

Что именно вы хотите выполнить модульный тест в своем коде? Что вы не знаете или где проблема? Также соблюдайте соглашение об именах .net для имен методов, которое является PascalCase. –

+0

Привет @SriramSakthivel, Спасибо за ваш взгляд в моем вопросе. Я обновил свою тестовую функцию. Я действительно поражен этим. Я не знаю, что мне нужно сделать, чтобы скрыть привязку. А также использование Задачи в реализации. –

+0

Идея MVC заключается в том, что вы не тестируете пользовательский интерфейс. Вы проверяете бизнес-логику в контроллере и других сервисах, которые используете. Также в вашем методе тестирования не хватает утверждения. Подтвердите, что должно быть истинным/ложным. Мне непонятно, чего вы не знаете. Простите за это. –

ответ

0

В DI Unity будет решить эту реализацию интерфейса для вас. Чтобы протестировать это, вам нужно создать поддельный класс, который реализует ваш интерфейс, и ввести (на конструкторе). Что-то вроде:

public class FakeClass : IGettProxy { 
public Task<List<CityDetails>> getCity(){ 
// here goes your fake implementation, to be injected on your controller. 
} 
// Remember to implement the other method 
} 

Затем, когда вы экземпляр контроллера вы собираетесь передать эту поддельную реализацию интерфейса (то, что конструктор требует).

И теперь вы можете проверить его.