jBehave with ExamplesTable
This extends the previous tutorials
Step 1: The story file which supplies a list of transactions as an input (i.e. via Given) and validates against a list of transactions that are supplied as shown below in Then.
Step 2: Map the story to step class TransactionProcessorStep as shown below. Pay attention to the ExamplesTable class provided by jBehave library.
Narrative: As a txns processor verify the number of txns returned Scenario: verify transactions Given a list of transactions txnCode|txndate|txnAmount A123|10/07/2005|500.00 A124|10/25/2005|500.00 A125|10/28/2005|500.00 A126|10/29/2005|500.00 A127|10/15/2005|500.00 A128|10/12/2005|500.00 When processTxn method is fired with accountCd = 1234 Then I expect to receive 5 transactions Then I expect transactions to have TransactionType|TransactionSubType|OtherIncomeExpType Income|InterestRevenue|NotApplicable Income|InterestRevenue|NotApplicable Expense|OtherIncome|NotApplicable EXPENSE|InterestRevenue|NotApplicable INCOME|NotApplicable|NotApplicable
Step 2: Map the story to step class TransactionProcessorStep as shown below. Pay attention to the ExamplesTable class provided by jBehave library.
//...
import org.drools.runtime.StatelessKnowledgeSession;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.model.ExamplesTable;
import org.joda.time.DateTime;
import org.mockito.Mockito;
import org.springframework.stereotype.Component;
@Component
public class TransactionProcessorStep
{
//...
//input
List<Transaction> transactionsList = Collections.EMPTY_LIST;
//output
List<Transaction> result;
@Given("a list of transactions $cashTransactionsTable")
public void cashTxns(ExamplesTable cashTransactionsTable)
{
this.transactionsList = toTransactionsList(cashTransactionsTable);
}
@When("processTxn method is fired with accountCd = $accountCode")
public void processTransaction(String accountCode)
{
try
{
//logic to process actual method and get the result
result = ...
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
@Then("I expect to receive $count transactions")
public void verify(int count)
{
try
{
MatcherAssert.assertThat(count, Matchers.equalTo(result.size()));
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
@Then("I expect transactions to have $transactionsTable")
public void verify2(ExamplesTable transactionsTable)
{
try
{
int i = 0;
for (Map<String, String> row : transactionsTable.getRows())
{
Transaction transaction = result.get(i);
String txnType = row.get("TransactionType");
MatcherAssert.assertThat(transaction.getTransactionType().name(),
Matchers.equalTo(txnType));
String analysisCode = row.get("TransactionSubType");
MatcherAssert.assertThat(transaction.getAnalysisCode(),
Matchers.equalTo(analysisCode));
String otherIncomeExpType = row.get("OtherIncomeExpType");
MatcherAssert.assertThat(transaction.getOtherIncomeAndExpensesSubType().name(),
Matchers.equalTo(otherIncomeExpType));
++i;
}
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
private List<Transaction> toTransactionsList(ExamplesTable table)
{
List<Transaction> ctList = new ArrayList<Transaction>();
for (Map<String, String> row : table.getRows())
{
//txnCode|txndate|txnAmount
String txnCode = row.get("analysisCd");
String txndate = row.get("txndate");
String txnAmount = row.get("txnAmount");
Transaction ct = new Transaction();
ct.setAnalysisCd(txnCode);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
try
{
ct.setTxnDt(sdf.parse(txndate));
}
catch (ParseException e)
{
throw new RuntimeException(e);
}
ct.setTxnAmount(new BigDecimal(txnAmount));
ctList.add(ct);
}
return ctList;
}
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home