ldallos/EvoValueManager

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

开放

#69 创建于 2025年6月17日

 (0 条评论) (0 个反应) (0 位负责人)TypeScript (0 个派生)auto 404
good first issuerefactortesting

仓库指标

星标
 (0 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

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

贡献者指南