Kezdőoldal » Számítástechnika » Programozás » Mockolt repository tesztelése...

Mockolt repository tesztelése során pontosan mit akarunk megállapítani c#?

Figyelt kérdés

É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.



2019. nov. 8. 15:13
1 2
 1/17 A kérdező kommentje:

Az assert valami ilyesmi?


Assert.That(crew, Is.EqualTo(logic.LCreateCrew(crew)));

2019. nov. 8. 15:16
 2/17 anonim ***** válasza:
75%

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.

2019. nov. 8. 15:22
Hasznos számodra ez a válasz?
 3/17 A kérdező kommentje:

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.

2019. nov. 8. 15:36
 4/17 anonim ***** válasza:
75%
CrewLogic osztály is meg tudnád mutatni?
2019. nov. 8. 16:20
Hasznos számodra ez a válasz?
 5/17 A kérdező kommentje:

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)

2019. nov. 8. 16:27
 6/17 A kérdező kommentje:

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();

}

2019. nov. 8. 16:29
 7/17 anonim ***** válasza:
75%
Az LCreateCrew kèt int tipust megy egy stringet fogad el paramamèterkènt, te meg egy Crew objektet pròbàlsz beleerőltetni...
2019. nov. 8. 16:36
Hasznos számodra ez a válasz?
 8/17 A kérdező kommentje:

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);

2019. nov. 8. 16:50
 9/17 anonim ***** válasza:
100%

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.

2019. nov. 8. 17:07
Hasznos számodra ez a válasz?
 10/17 anonim ***** válasza:
100%
Hol van az LCreateCrew(crew: Crew): void metódusod??
2019. nov. 8. 17:12
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!