--
You received this message because you are subscribed to the Google Groups "testng-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to testng-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/testng-users/9089c4e4-f119-4522-9133-9b4383d7ce5bn%40googlegroups.com.

public class LazyLoadingDataProviders {
@Test(dataProvider = "dp")
public void greetings(String person) {
System.err.println("Hello there " + person);
}
@DataProvider(name = "dp")
Iterator<Object[]> testData() {
return Arrays.asList(
new Object[]{"He-man"},
new Object[]{"Spider-man"},
new Object[]{"Super-man"}
).iterator();
}
}
To view this discussion on the web visit https://groups.google.com/d/msgid/testng-users/9589d146-400c-4329-8d10-82144a75363cn%40googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/testng-users/bf4f732c-6f54-46c6-89a8-506b90aa7430n%40googlegroups.com.
import com.arakelian.faker.service.RandomPerson;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class PopulateDB {
private Connection conn;
@BeforeClass
public void setup() throws SQLException {
String location = "./src/test/resources/my_db";
conn = DriverManager.getConnection("jdbc:h2:file:" + location, "sa", "");
conn.setAutoCommit(true);
createTable();
}
@Test(invocationCount = 100)
public void insertData() throws SQLException {
String name = RandomPerson.get().next().getFirstName();
String query = "insert into my_user(name) values (?)";
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, name);
if (statement.execute()) {
System.err.println("Inserted " + statement.getUpdateCount() + " record");
}
}
@AfterClass
public void cleanup() throws SQLException {
if (conn != null) {
conn.close();
}
}
private void createTable() throws SQLException {
String query = "CREATE TABLE my_user(ID INT AUTO_INCREMENT, NAME VARCHAR(50))";
conn.prepareStatement(query).execute();
}
}import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Function;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ReadFromDB {
private Connection conn;
@BeforeClass
public void setup() throws SQLException {
String location = "./src/test/resources/my_db";
conn = DriverManager.getConnection("jdbc:h2:file:" + location, "sa", "");
conn.setAutoCommit(true);
}
@DataProvider(name = "dp")
public Iterator<Student[]> getTableData() throws SQLException {
String query = "select * from my_user";
ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY)
.executeQuery(query);
return new TableData<>(rs, Student::newInstance);
}
@Test(dataProvider = "dp")
public void testMethod(Student s) {
System.err.println("Student ==> " + s);
}
@AfterClass
public void cleanup() throws SQLException {
if (conn != null) {
conn.close();
}
}
public static class Student {
private final int id;
private final String name;
private Student(int id, String name) {
this.id = id;
this.name = name;
}
public static Student[] newInstance(ResultSet rs) {
try {
String name = rs.getString("name");
int id = rs.getInt("id");
return new Student[]{new Student(id, name)};
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public String toString() {
return "Student{id = " + id + ", name='" + name + "'}";
}
}
public static class TableData<T> implements Iterator<T[]> {
private final ResultSet resultSet;
private final Function<ResultSet, T[]> supplier;
private final AtomicBoolean readFlag = new AtomicBoolean(false);
public TableData(ResultSet resultSet, Function<ResultSet, T[]> supplier) {
this.resultSet = resultSet;
this.supplier = supplier;
}
@Override
public boolean hasNext() {
try {
if (!readFlag.get() && !resultSet.isBeforeFirst()) {
// Data was not read. So reset the cursor by one row.
resultSet.previous();
}
return resultSet.next();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
readFlag.set(false);
}
}
@Override
public T[] next() {
try {
return supplier.apply(resultSet);
} finally {
readFlag.set(true);
}
}
}
}To view this discussion on the web visit https://groups.google.com/d/msgid/testng-users/bbf9acee-e68d-412f-9940-31fe8f8f5c7an%40googlegroups.com.