Test sprawdzający poprawność dodawania elementów do listy i ich usuwania

0

Witam,
chciałem napisać test sprawdzający poprawność dodawania i usuwania elementów do listy.
Mam klasę Student i ma on listę wskaźników klasy Grupa:

list <Grupa*> grupy;

metody, które dodają i usuwają grupy:

void Student::dodajGrupe(Grupa * nowa)
{
    grupy.push_back(nowa);
}
void Student::usunGrupe(Grupa * usun)
{
    list<Grupa*>::iterator it = grupy.begin();
    for (auto item : grupy)
    {
        if(item == usun)
            break;
        it++;
    }
    grupy.erase(it);
}

Jak napisać do tego testy? Do tej pory sprawdzałem tylko poprawność prostych metod jak np:

BOOST_AUTO_TEST_CASE(HumanFirstNameCase) 
{
    Human czlowiek("Adam", 2.0,2.0,2);
    BOOST_REQUIRE_EQUAL(czlowiek.getName(), "Adam");
}
2

musialbys miec grupe jakos wystawiona by sie moc do niej dobrac i sprawdzic

nie znam boostowego frameworka tak dobrze, ale pewnie cos na zasadzie takiego

BOOST_AUTO_TEST_CASE(DodajGrupe) 
{
    // tutaj tworzysz grupe, najlepiej skorzystac z jakiegos buildera by to zrobil za Ciebie
   Grupa *grupa = new Grupa() // nie powinienes uzywac wskaznikow golych, ale przy Twojej definicji sie nie da inaczej, zapoznaj sie z smart pointerami
   // tez powiniens dodac tej grupie jakies pole po ktorym mozesz sprawdzic czy rzeczywiscie to ta sama grupa
    Student student;
    student.dodajGrupe(grupa);

    auto grupaOdStudenta = student,ZwrocGrupe();
    auto found = std::find(grupaOdStudenta.begin(), grupaOdStudenta.end(), [] {//tutaj Twoj komparator by znalezc po tej wlasciwosci}
    BOOST_REQUIRE_EQUAL(found != grupaOdStudenta.end(), true); // widze ze nie ma not equal dlatego takie to dziwne
}

to jest pseudokod, ale idea w nim jest zawarta

i zmien z polskich nazw na angielskie ;)

0

zapomniałem napisać że grupa jest identyfikowana przez swoją nazwę, nie bardzo rozumiem zapis:
auto grupaOdStudenta = student.ZwrocGrupe();

ZwrocGrupe() ma zwracać listę wszystkich grup studenta?

0

tak jak pisalem, chcesz testowac metody studenta ktore dodaja cos do grupy

Zeby sprawdzic ten kod, musisz miec dostep do grupy (jakis) zeby sprawdzic czy jak dodales do grupy jakas grupe to czy ona rzeczywiscie sie tam znajduje

0

Napisałem coś takiego i wydaje się działać:

BOOST_AUTO_TEST_CASE(DodajGrupe)
    {
        Grupa * grupa1 = new Grupa("grupa1");
        Student student1("Jan","Kowalski");
        student1.dodajGrupe(grupa1);

        auto grupyOdStudenta = student1.zwrocGrupy();
        auto found = std::find(grupyOdStudenta.begin(), grupyOdStudenta.end(), grupa1);

        BOOST_REQUIRE_EQUAL(found != grupyOdStudenta.end(), true);
    }

teraz zabieram się za usuwanie.

0

co o tym sądzisz?

BOOST_AUTO_TEST_CASE(UsunGrupe)
    {
        Grupa * grupa1 = new Grupa("grupa1");
        Grupa * grupa2 = new Grupa("grupa1");
        Student student1("Jan","Kowalski");
        student1.dodajGrupe(grupa1);
        student1.dodajGrupe(grupa2);

        auto grupy1 = student1.zwrocGrupy();

        student1.usunGrupe(grupa1);

        auto grupy2 = student1.zwrocGrupy();

        BOOST_REQUIRE_EQUAL(grupy1 != grupy2, true);
    }
0

Teraz jest ok?

BOOST_AUTO_TEST_CASE(UsunGrupe)
    {
        Grupa * grupa1 = new Grupa("grupa1");
        Student student1("Jan","Kowalski");
        student1.dodajGrupe(grupa1);
        student1.usunGrupe(grupa1);

        auto grupyOdStudenta = student1.zwrocGrupy();
        auto found = std::find(grupyOdStudenta.begin(), grupyOdStudenta.end(), grupa1);

        BOOST_REQUIRE(found == grupyOdStudenta.end());
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1