К примеру создание новой записи.
Появляется новый рекорд, которому присваивается идентификатор.
Как лучше передать этот идентификатор следующему степу, который должен выполнять действия с новой записью?
Если правильно понял вас, извлеките id-шник и передайте его в качестве параметра. При работе с базой, выполните sql запрос для получение максимального id(в вашем случае это будет последняя запись в таблице).
SQL запрос: SELECT MAX(id) FROM employee;
Здесь мы получаем id последней записи, дальше значение результата(к примеру - 18), возвращает функция в качестве параметра.
Если вы используете два разных объекта ObjectA, ObjectB, и вам в ObjectB нужно получить значение из поля объекта ObjectA, тогда:
- В ObjectА извлекаете id-шник, присваиваете его статическому полю, к примеру public static String myId = “18”;
- Затем, String val = ObjectA.myId;
- Теперь в у вас есть значение полученное из ObjectA, и вы можете выполнять свои действия с ним уже в другом объекте.
Я использую передачу данных через поле класса, если все шаги реализованы непосредственно в этом классе.
Если же, дергаются разные шаги из разных классов, то тут, как советовал @svim – только через параметры метода.
Есть еще один способ – это так называемые, контексты. Зачастую, это глобальный объект, очень часто хэш (hash, map, hash-map, dictionary), к которому можно получить доступ из любого места. Но, это достаточно опасный подход, потому что непонятно кто и когда там меняет данные.
Спасибо,
Идея про поле класса ясна, про контексты тоже.
Непонятно про параметры. Как один степ может передавать другому значения?
К примеру
@When “user selects the latest transactionID”
@When “user adds the transaction to the report”
Первые три варианта которые сразу пришли в голову.
Вариант 1.
Есть два класса StepA, StepB.
StepA - содержит метод который выполняет работы с базой, для получения последней записи.
И так мы имеем
public class StepA {
public static String getLastId()
{
// do some special magic
return lastId;
}
}
В StepA - выполнили шаг1(sql запрос). Теперь, чтобы получить параметр из StepA, StepB выглядит следующим образом:
public class StepB {
public void continueToDoSomeMagic() {
String lastId = StepA.getLastId();
}
}
В коде приведённом выше, мы получили значение из StepA и можем продолжать работать с ним в StepB.
Вариант 2.
Имеем эти же классы, только с небольшим изменением:
public class StepA {
public static String getLastId() {
// do some special magic
return lastId;
}
public static void main(String... args)
{
/**
* Здесь мы передаём результат getLastId конструктору
* StepB, в качестве параметра
*/
StepB objB = new StepB(getLastId());
}
}
Класс StepB, будет иметь вид:
public class StepB {
public StepB(String s)
{
this.getLastId = s;
}
public String getLastIdMethod()
{
return this.getLastId;
}
private String getLastId = null;
}
Вариант 3
Сделать оболочку в которой будут выполняться все степы по-порядку.
К примеру есть класс StepMaker в котором выполняются все Step - объекты, и передаются результаты от объекта к объекту в виде параметров.
public class StepMaker {
private StepA stepA;
private StepB stepB;
private StepC stepC;
public void initMethods() {
stepA = new StepA();
stepB = new StepB();
stepC = new StepC();
}
@Test
public void TestCase()
{
StepMaker sm = new StepMaker();
sm.initMethods();
String getId = stepA.getLastId();
stepB.doSomething(getId);
String getSomethingResult = stepB.getResult();
stepC.makeReport(getSomethingResult);
}
}