testy jednostkowe metody add

0

Piszę testy jednostkowe do metody dodawania oraz usuwania kont
peirwsza metoda to:
public String addNewAccount(String login, String password){
Account account == new Account();
account.setLogin(login);
account.setPassword(password);
accountRepository.save(user);
return "Saved";
}

Byłabym wdzięczna jakby ktoś podpowiedzial, pokazał jak napisać można do tej metody unit test - jakiś pseudokod oraz wskazać przykłądy dla jkich to p[rzetetsować 1szy - null, drugi jakaś warttosc mysle

0

Hmmm... metoda zapisuje jakiś obiekt w bazie. Oczywiście nie można przetestować, czy ten obiekt rzeczywiście się w niej pojawił, bo to by było za trudne, co nie...?

1

Wrzucic accountRepository jako mocka do testu i sprawdzic czy zostala na nim wywolana metoda save z Account z danym username i password.
cos w tym stylu

void shouldSaveUserWithGivenUsernameAndPasswordToDatabase {
accountReposiory = Mock()
String username = "hello"
String pass = "pass"
Accunt acc = new Account(username, pass);

addNewAccount(username, pass);

verify(accountRepository).save(acc);

}
0

myślałam, żże yy wydowałć przy użyciu assert.Equals("null", X); lub assertNull ? ktora lepsza do sprawdzenia czy jest nullem?

1
myflowof napisał(a):

myślałam, żże yy wydowałć przy użyciu assert.Equals("null", X); lub assertNull ? ktora lepsza do sprawdzenia czy jest nullem?

Sprawdzenie czy metoda waliduje parametry wejściowe to jeden test, a sprawdzennie poprawnego zachowania przy poprawnych parametrach wejściowych to drugi.

1

A czemu nie możesz sprawdzić jak najprościej:

a)

long dbSize = accountRepository.findAll(Account.class).size();
addNewAccount("A", "B");
long newDbSize = accountRepository.findAll(Account.class).size();
assertEquals(dbSize +1, newDbSize );

b)

addNewAccount("A", "B");
Account acc = accountRepository.findByUsername("A");
assertNotNull(acc);

Lub jak ogarniasz mocki (a chyba nie), to zrobić to jak pisał @gspansky? IMO zwracanie stringa przy dodawaniu do bazy nie ma sensu, prędzej jakiś boolean lub sam obiekt który zapisujesz. Co oczywiście nie będzie oznaczać, że wszystko poprawnie się wykonało.

0
public Iterable<Acount> getAllAcount(){
	return this.AcountRepository.findAll();
}


to przetestować w taki sam sposób?
0

a jakbym chciała ta 1sza metode ( z tematu) przetestować jeszcze czy jest null to po prostu tak samo jak NotNull tylko inny assert wywowałać, czyli:

addNewAccount("A", "B");
Account acc = accountRepository.findByUsername("A");
assertNull(acc);

czy coś dodatkowo trzeba podstawić/zmienić?

0

Chcesz sprawdzac wywołanie metody w metodzie? To chyba nie najlepszy pomysł. Takich rzeczy jak

void deleteUser(Int id) {
 userRepository.delete(id);
}

Po prostu sie nie sprawdza. Testy jednostkowe mają sprawdzac logike a nie czy wyłanie metody w metodzie zachodzi :D

0

Autorce polecam świetną książkę. Najlepsza pozycja o pisaniu testów jaką znajdziesz. Nie jest łatwa dla początkujących, ale pokrywa temat testów w 100%.

0
public Iterable<Acount> getAllAcount(){
    return this.AcountRepository.findAll();
}
 

podpowie ktoś przykładowy pseudokod jak mozna to przetestowaC jesli chodzi o assert ? wystarczy jeden przykladen na null reszte dopsize sama ;)

0
myflowof napisał(a):
public Iterable<Acount> getAllAcount(){
    return this.AcountRepository.findAll();
}
 

podpowie ktoś przykładowy pseudokod jak mozna to przetestowaC? wystarczy jeden przykladen na null reszte dopsize sama ;)

Ja bym tego w ogóle nie testował. Tam nie ma logiki, tylko delegacja metody read only. Na upartego:

public void shouldReturnNotNullCollection() {
     Assert.isNotNull(getAllAcount());
}
0

dziękuję za pomoc
a w 1szej metodzie z tematu jakbym chciałą sprawdzić przypadek, gdy łancuch string dla account i password jest pusty, to tak jest dobrze napisane?

addNewAccount(" ", " ");
Account acc = accountRepository.findByUsername(" ");
assertTrue(acc);

czy coś zmienić trzeba i jak ?

0

nie mam teraz możliwości odpalenia, niemniej po szybkim przejrzeniu tutorialu unit testow, domyslam sie, ze chyba ma byc tak:

addNewAccount("A ", "B ");
Account acc = accountRepository.findByUsername(" ");
assertTrue(acc);

0

Jak nie masz możliwości odpalenia, to zawsze jest dokumentacja:

http://junit.sourceforge.net/javadoc/org/junit/Assert.html

Zobacz jak wygląda assertTrue().

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