#c# #unit-testing #xamarin.forms #nunit
#c# #модульное тестирование #xamarin.forms #nunit
Вопрос:
Я тестирую свою ViewModel, которая содержит метод, который исходит из внедрения зависимостей, но не вводит метод, я, честно говоря, не знаю, что я делаю неправильно.
мой тест.
[TestCase("5")]
[TestCase("10")]
[TestCase("-1")]
[TestCase("0")]
[TestCase("100")]
//[TearDown]
[Test]
public async Task Deve_Obter_A_Lista_De_Herois_Dado_A_Quantidade_Menor_Ou_Igual_A_100_E_Maior_Que_Zero(string quantidadeHerois)
{
//Arrang
var mockRepo = new Mock<IHeroes>();
ListHeroesViewViewModel listHeroesViewViewModel = new ListHeroesViewViewModel(null, mockRepo.Object);
//action
await listHeroesViewViewModel.GetHeroes(quantidadeHerois);
//assert
if(quantidadeHerois.Equals("5"))
Assert.AreEqual(5, listHeroesViewViewModel.Herois.Count);
else if (quantidadeHerois.Equals("10"))
Assert.AreEqual(10, listHeroesViewViewModel.Herois.Count);
else
Assert.AreEqual(100, listHeroesViewViewModel.Herois.Count);
}
моя viewmodel
public async Task GetHeroes(string limit)
{
try
{
IsBusy = true;
///
////in this point it does not enter the method and returns null////
///
var heroes = await _heroes.GetHeroes(limit);
if (heroes.data != null)
Herois = new ObservableCollection<Result>(heroes.data.results);
}
catch (Exception ex)
{
await App.Current.MainPage.DisplayAlert("Atenção", $"Error:{ex.Message}", "Ok");
}
finally
{
IsBusy = false;
}
}
конструктор ViewModel
public ListHeroesViewViewModel(INavigationService navigationService, IHeroes heroes) : base(navigationService)
{
_navigation = navigationService;
//
///here he receives the dependency caused by mock.object
//
_heroes = heroes;
Title = "Heroes";
}
Я не знаю, что я могу делать неправильно, спасибо за понимание, это мой первый тест
Комментарии:
1. Вы не настраиваете
GetHeroes
метод. И если это ваш первый тест, я предлагаю вам прочитать немного больше о mocking. Похоже, вы используете Moq, поэтому начните здесь: github.com/moq/moq4
Ответ №1:
По умолчанию макет будет возвращать значения по умолчанию, что означает, что для типов классов вы получаете null
.
Если вы хотите что-то вернуть, вам нужно это настроить.
Вот пример настройки , которая говорит всякий раз , когда что — то вызывает метод GetHeroes
return new Hero()
.
var mockRepo = new Mock<IHeroes>();
mockRepo.Setup(x => x.GetHeroes(It.IsAny<string>())).Returns(new Hero());
Это простая настройка, вы можете сделать ее настолько сложной, насколько захотите.
Здесь вы можете найти более подробную информацию о том, как работает mocking.