Mockolt repository tesztelése során pontosan mit akarunk megállapítani c#?
Értem a unit testeket, de ez a dependency elválasztás teljesen összekavart és nem igazán értem amit googlen találtam, de azért összeállítottam egy példát, hogy mit nem értek.
public void TestCRUDCreateCrew()
{
Mock<ICrewRepository> mockInstance = new Mock<ICrewRepository>();
CrewLogic logic = new CrewLogic(mockInstance.Object);
Crew crew = new Crew()
{
Crew_Id = 999,
Sex = 2,
Name = "Test Joe",
};
logic.LCreateCrew(crew); //nem működik "nincs formal parameter corresponding a "sex" hez", de a következő sor meg működik (meg teszteltem a crudot consoleból, az is működött). Nem ugyanaz a kettő?
//logic.LCreateCrew(999, 2, "Test Joe");
mockInstance.Verify(x => x.CreateCrew(999, 2, "Test Joe"), Times.Once);
Assert.That(Result ???, Is.EqualTo(???));
}
Az első problémám, amit kommentben írtam, ennek valószínűleg nincs közre a mockhoz, de nem tudok rájönni mi a baja.
A második problémám, hogy pontosan mit csinálok.
Az assert valami ilyesmi?
Assert.That(crew, Is.EqualTo(logic.LCreateCrew(crew)));
Ezek szerint mégsem teljesen érted a unit testeket.
A unit testelés lényege, hogy teszteld a kódod (nem az egész kódot, hanem egyszerre csak osztályok, függvények szintjén), lehetőleg függetlenül a dependenciáktól.
A konkrét kódod ismerete nélkül nem lehet megmondani, hogy hogyan milyen teszteket írj, de tipikusan ellenőrizni akarod, hogy helyes bemenetkre helyes értékeket ad vissza, nem dob kivétel, a szélsőséges eseteket jól kezeli le, valamint hibás bemenetekre is az elvárt módon működik.
//nem működik "nincs formal parameter corresponding a "sex" hez", de a következő sor meg működik (meg teszteltem a crudot consoleból, az is működött). Nem ugyanaz a kettő?
Ebből egy szót sem értek.
Köszi a választ. A kérdés, hogy ez:
Crew crew = new Crew()
{
Crew_Id = 999,
Sex = 2,
Name = "Test Joe",
};
logic.LCreateCrew(crew);
egyenlő-e ezzel:
logic.LCreateCrew(999, 2, "Test Joe");
Mert az első hibát jelez, a második nem és nem értem, ez hogyan lehetséges.
public class CrewLogic : ICrewLogic
{
ICrewRepository crewRepo;
public CrewLogic(ICrewRepository crewRepo)
{
this.crewRepo = crewRepo;
}
public CrewLogic()
{
this.crewRepo = new CrewRepository(new PlanesEntities());
}
public void LCreateCrew(int crewid, int sex, string name)
{
this.crewRepo.CreateCrew(crewid, sex, name);
}
}
Azóta teszteltem egy másik osztállyal is mindig a második attributummal van baja. A teljes hibaüzenet:
there is no argument given that corresponds to the required formal parameter "sex" //(vagy bármilyen második attributum)
Akkor gondolom a repository is hasznos
public void CreateCrew(int crewid, int sex, string name)
{
var newCrew = new Data.Crew
{
Crew_Id = crewid,
Sex = sex,
Name = name,
};
this.ctx.Set<Data.Crew>().Add(newCrew);
this.ctx.SaveChanges();
}
Az alábbi kód az object nélkül ugyanazt a hibát dobja, nem hiszem, hogy ezzel lesz baj
public void TestCRUDCreateCrew()
{
CrewLogic logic = new CrewLogic();
Crew crew = new Crew()
{
Crew_Id = 999,
Sex = 2,
Name = "Test Joe",
};
logic.LCreateCrew(crew);
Te most szopatsz minket?
Nem létezik olyan függvényed, amit használni próbálsz.
Plusz egyelőre azt sem értem mi értelme a logic osztálynak, ha az égvilágon semmit nem csinál.
+: Már ott nagy zavar van a fejedben szerintem, hogy: "Mockolt repository tesztelése során".
Nem a mockolt repositoryt akarod tesztelni, mert a mockon nincs mit tesztelni. A mockot arra használod, hogy helyettítsd a valódi repository-t, valami kontrollálhatóbbal.
Te azt az osztályt akarod tesztelni, ami használja a repositoryt.
Azért nem tudod milyen tesztet írj, mert a tesztelendő osztályod az égvilágon semmit nem csinál, nincs rajta mit tesztelni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!