Jednak w TestNG dostępny jest także znacznie potężniejszy mechanizm parametryzacji testów danymi. Jest nim tzw. dostawca danych - data provider.
Dostawcę danych definiuje się jako metodę oznaczaną adnotacją
DataProvider. Metoda ta powinna zwracać dwuwymiarową tablicę obiektów (Object[][]) lub iterator po jednowymiarowych tablicach objektów (Iterator<Object[]>). Przy czym kolejne tablice obiektów zwracane przez iterator (lub te w dwuwymiarowej tablicy) zawierają argumenty do kolejnego wywołania (tyle razy ile jest tych tablic) danej metody testującej.Metoda dostawcy danych może być bezargumentowa lub posiadać jeden argument o typie
java.lang.reflect.Method, który określa metodę testującą, dla której będą dostarczane dane.W celu przypisania dostawcy danych do metody testującej, trzeba odpowiednio ustawić parametr
dataProvider dla adnotacji Test, którą jest oznaczona dana metoda testująca. Opcjonalnie, jeśli metoda testująca jest w innej klasie niż metoda dostarczająca dane, należy ustawić jeszcze parametr dataProviderClass adnotacji Test. Poza tym typy argumentów metody testującej muszą być zgodne z typami obiektów w tablicach zwracanych przez dostawcę danych.Niestety nie można łącznie wykorzystywać dostawcy danych i parametrów definiowanych w pliku konfiguracyjnym. Nie można również przekazywać tych parametrów do metod dostarczających dane.
Poniżej zamieszam przykładowe użycie dostawcy danych TestNG:
package pl.dwalczak.jpapg2;
import org.apache.log4j.Logger;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import pl.dwalczak.jpapg2.model.Address;
import pl.dwalczak.jpapg2.model.User;
@Test
public class UserTest extends JpaTestCase{
 
 private static final Logger LOG = Logger.getLogger(UserTest.class);
 
 @DataProvider(name="address")
 public Object[][] createTestData() {
  LOG.debug("createTestData");
  return new Object[][] {
   {"Heniek", new Address("Poznan", "11-111", "Jadwigi", "12c/23")},
   {"Maniek", new Address("Wroclaw", "22-222", "Kosciuszki", "14b")}};
 }
 @Test(dataProvider="address")
 public void createUser(String user, Address address) {
  LOG.debug("create user: " + user);
  em.persist(new User(user, address, address));
 }
 
 @Test(dependsOnMethods={"createUser"}, dataProvider="address")
 public void findUser(String user, Address address) {
  LOG.debug("find user: " + user);
  User u = (User) em.createNamedQuery("user.findByNickName").setParameter("nickName", user).getSingleResult();
  LOG.debug("found user: " + u);
  Assert.assertNotNull(u);
  Assert.assertEquals(address, u.getAddress());
 }
}
Zasoby
Pliki źródłowe przykładuDokumentacja TestNG - 5.5.2 - From DataProviders
 
 
Brak komentarzy:
Prześlij komentarz