ldallos/EvoValueManager

Meglévő CharacterTest_WithNullParameters unit teszt átírása egy működő verzióra

Aberta

#69 aberto em 17 de jun. de 2025

 (0 comentário) (0 reação) (0 responsável)TypeScript (0 fork)auto 404
good first issuerefactortesting

Métricas do repositório

Stars
 (0 estrela)
Métricas de merge de PR
 (Métricas PR pendentes)

Description

Van a TestProject CharacterControllerTests.cs file-jában egy CharacterTest_WithNullParameters teszt, ami a react-os átalakítások miatt már nem is fordul. Minimális átalakítással egy használható unit tesztet lehetne belőle csinálni, ami jó betanuló feladat is lehet az nunit-os tesztek írásához.

Az alapprobléma az, hogy a CharacterController-nek már nincs sima Character metódusa, ami korábban egy ViewResult objektummal tért vissza. Helyette viszont van egy GetCharacter metódus. Lehetne azt tesztelni, hogy mi történik vele, ha egy nem létező id-val hívjuk meg. Ez akkor történik meg, ha a CharacterService GetCharacterById metódusa null értéket ad vissza és ekkor a CharacterController bemegy egy 404 NotFound ágra.

// GET: api/Character/5
[HttpGet("{id}")]
public async Task<ActionResult<CharacterViewModel>> GetCharacter(int id)
{
    var character = await _characterService.GetCharacterById(id);

    if (character == null)
    {
        return NotFound();  // <--- A tesztben ide kéne nekünk eljutni
    }
    ...

Ehhez a következő módosításokra lesz szükség a teszben:

  1. A Preparation részből ki kell dobnunk a service-es GetAllCharacters mock-olását, mert itt a nekünk a GetCharacterById-ra lesz szükségünk. Ezt a következőképpen tudjuk elérni: mockService.Setup(service => service.GetCharacterById(It.IsAny<int>())).ReturnsAsync((Character?)null); De igazából ezt sem kell beleírnunk a kódba, mert a Moq framework egy interface összes metódusát úgy mock-olja, hogy azok null értéket adnak vissza minden bejövő paraméterre.
  2. Az Action részben cseréljük le a controller.Character hívást controller.GetCharacter-re. Paraméternek tök mindegy, hogy milyen id-t adunk meg, mert a mock-olás miatt a service mindegyikre null értéket ad majd vissza. A result-ot sem kell többé ViewResult-ra átalakítani.
  3. A Verification részben pedig lehetne azt vizsgálni, hogy ilyenkor egy 404-es hibát várunk és nem jön vissza semmilyen eredmény sem: Assert.That(result.Result, Is.TypeOf<NotFoundResult>()); Assert.That(result.Value, Is.EqualTo(null));

A tesztek eredményét a VS-ben a Test/Test Explorer-ben lehet megnézni, ha a Run gombra kattintottok.

Image

Guia do colaborador