Unit testing einer Web-Api-controller
Ich bin ziemlich neu in Unit-Testing, und ich bin versucht, eine Einheit zu schaffen-Test für eine Web-Api-Controller, die ich erstellt habe, die gibt eine Liste von Marken.
Meinen WebApi controller Get()
Methode sieht wie folgt aus:-
[HttpGet("/api/Brands/Get", Name = "GetBrands")]
public async Task<IActionResult> Get()
{
var brands = await _brandsService.GetAll(null, "Image");
return Json(brands);
}
Den Generischen Service-Methode sieht wie folgt aus:-
public async Task<List<T>> GetAll(
Func<IQueryable<T>,
IOrderedQueryable<T>> orderBy = null,
string includeProperties = null)
{
return await _genericRepository.GetAll(orderBy, includeProperties);
}
sowie der Allgemeine Repo-Methode sieht wie folgt aus:-
public async Task<T> Get<TKey>(Expression<Func<T, bool>> filter = null, string includeProperties = "", bool noTracking = false)
{
includeProperties = includeProperties.Trim() ?? string.Empty;
IQueryable<T> query = Context.Set<T>();
if (noTracking)
{
query.AsNoTracking();
}
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
return await query.SingleOrDefaultAsync();
}
Dies ist arbeiten und ich bin der Rückgabe einer Liste von Marken aus der DB.
Nun versuchte ich, eine Einheit zu schaffen-test für diese :-
[SetUp]
public void Setup()
{
Brands = new List<Brand>
{
new Brand
{
Id = 1,
Name = "Adidas",
ImageId = 1
},
new Brand
{
Id = 2,
Name = "Nike",
ImageId = 2
},
new Brand
{
Id = 3,
Name = "Puma",
ImageId = 3
}
};
}
[Test]
public async Task Get_ReturnsAAListOfBrands()
{
//Arrange
var mockService = new Mock<IGenericService<Brand>>();
mockService.Setup(repo => repo.GetAll(null, null)).Returns(Task.FromResult(Brands));
var controller = new BrandsController(mockService.Object);
//Act
var result = await controller.Get();
//Assert
}
aber das Ergebnis ist immer null. Bin ich Prüf das richtig oder muss ich ändern, meine Unit-Test-code um zu überprüfen, dass die mockservice hat 3 Einträge gespeichert.
Vielen Dank für Ihre Hilfe und Zeit.
danke @Alex, ich werde überprüfen, dass die Frage aus
ja gleiche problem, das ich habe, GetAll(null,null) nicht zu sein scheinen immer Treffer in den debugger
verwenden Sie die
It.IsAny<T>
Methoden, wenn die Argumente sind ohne Belang für die PrüfungDer debugger wird nicht geben Sie die Methode, die Sie brauchen, um zu simulieren die return-Wert mit dem setup.
InformationsquelleAutor Johann | 2017-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den setup zu erwarten, dass ein bestimmtes Verhalten oder ein argument für den test.
In diesem Fall mit der
It.IsAny<T>()
zu sagen, das set-up, was zu erwarten ist in Bezug auf die Argumente, die erlauben wird, den test zu fließen, wie gewünscht.Gegeben, dass die
GetAll
Methode erfordert zwei ParameterFunc<IQueryable<T>, IOrderedQueryable<T>>
undstring
die setup konfiguriert, was zu tun ist basierend auf den eingegebenen Werten für diese Parameter.Werfen Sie einen Blick auf die Moq Quickstart für ein besseres Verständnis, wie diese zu verwenden, mocking framework
ja, ich habe zu untersuchen, mocking besser, deshalb bin ich dabei einige Beispiele. Vielen Dank für Eure Hilfe
Dieses Beispiel hat mir sehr geholfen, zu kommen mit der Antwort, stackoverflow.com/questions/35565353/...
Froh zu helfen. Happy coding!!!
nur noch eine Letzte Sache, wie kann ich überprüfen, dass das Ergebnis.Count() ist eigentlich 3? Meine JsonResult nicht scheinen, um mir zu erlauben, die Daten sehen, und ich kann nicht das Count() auf den Wert:- JsonResult actualResult = await-controller.Get() als JsonResult; var data = actualResult.Daten;
InformationsquelleAutor Nkosi