I am very new to development and even more in the dark when it comes to
Ruby, but I am still having fun. I also apologise for the long
snippets of code in this post.
I am trying to test a database migration using Ruby and the built in
Test framework.
I am stuck however on a particular problem and it relates to control
flow and the dynamic use of âdefine_methodâ to create multiple Tests if
an assert_equal âfailsâ thus jumping out of a loop and stopping all
future tests.
I found what I thought was the solution from this post:
http://www.ruby-forum.com/topic/204730
One I notice however is it will not execute the define_method block
until it has executed all of the exterior loops.
My code is as follows:
class TestSuite < Test::Unit::TestCase
#Build a hash of Source Database columns and target Database columns
companyRRAccessToBeacon = Hash.new
companyRRAccessToBeacon['company_id'] = 'ID'
cmpanyRRAccessToBeacon['ultimate_parent_id'] = 'GlobalUltimateID'
companyRRAccessToBeacon['fullname'] = 'Name'
companyRRAccessToBeacon['turnover_curr'] = 'TurnoverCurrencyTypeID'
companyRRAccessToBeacon['turnover'] = 'TurnoverAmount'
companyRRAccessToBeacon['u_size_code'] = 'CorporateSizeTypeID'
companyRRAccessToBeacon['corp_status_id'] =
âCorporateOwnershipTypeIDâ
companyRRAccessToBeacon[âcreated_userâ] = âRowCreatedByâ
companyRRAccessToBeacon[âcreated_datetimeâ] = âRowCreatedDateâ
companyRRAccessToBeacon[âlast_modification_byâ] = âRowModifiedByâ
companyRRAccessToBeacon[âlast_modification_dateâ] =
âRowModifiedDateâ
companyRRAccessToBeacon[âoff_limits_idâ] = âOffLimitsIDâ
#Connect to the RRAccess and Beacon databases
rraccesshandle = connectrraccessdb
beaconhandle = connectbeacondb
#Companyrowdata stores the Data Driven tests used for the test
below.
companyrowData =
getXlsRowData(âC:\Users\ecucropc\Documents\Visual Studio
2008\Projects\DataSynchronisation\DataSynchronisation\Company
Data.xlsâ, âCompanyâ, âA1:L3â)
#Loop through each record returned in the Data Driven Test set.
companyrowData.each do | companydata |
puts "In #{companydata} loop"
#If no Company records are returned then run the test.
companydata["company_id"] != ""
recordtofetch = companydata["company_id"]
#Get the common RRAccess Company columns
sqlRRaccessValues = (getDBValue(rraccesshandle, "select
company_id, ultimate_parent_id, fullname, turnover_curr, turnover,
U_Size_Code, corp_status_id, created_user, created_datetime,
last_modification_by, last_modification_date, off_limits_id from
RRAccessLive.Company WHERE Company_id = ?", recordtofetch))
#Get the common Beacon Company columns
sqlBeaconValues = (getDBValue(beaconhandle, "select ID,
GlobalUltimateID, Name, TurnoverCurrencyTypeID, TurnoverAmount,
CorporateSizeTypeID, CorporateOwnershipTypeID, RowCreatedBy,
RowCreatedDate, RowModifiedBy, RowModifiedDate, OffLimitsID from
BeaconLive.Company WHERE ID = ?", recordtofetch))
#For each HashMap pair get the values from the RRAccess and Beacon
databases and then
#loop through and perform the comparison test.
companyRRAccessToBeacon.each {|key, value|
puts "Inside each loop #{companyRRAccessToBeacon[key]}"
rrAccessColumnValue = sqlRRaccessValues[key]
rrBeaconColumnValue = sqlBeaconValues[value]
#This dynamic define_method is used to create many tests.
define_method ("test_company_" + companyRRAccessToBeacon[key])
do
puts âInside assert_equal loop for
test_company_#{companyRRAccessToBeacon[key]}â
assert_equal sqlRRaccessValues[key], sqlBeaconValues[value]
end
}
end
end
The output of this is as follows:
In off_limits_idFturnover_currUSDlast_modification_date2008/06/25
11:10:00corp_status_idQUOcreated_user2000734ultimate_parent_id1fullnameAAR
CorporationU_Size_Code1last_modification_by40000347turnover1061169created_datetime1988/10/17
00:00:00company_id1 loop
Inside each loop OffLimitsID
Inside each loop TurnoverCurrencyTypeID
Inside each loop RowModifiedDate
Inside each loop CorporateOwnershipTypeID
Inside each loop RowCreatedBy
Inside each loop GlobalUltimateID
Inside each loop Name
Inside each loop CorporateSizeTypeID
Inside each loop RowModifiedBy
Inside each loop TurnoverAmount
Inside each loop RowCreatedDate
Inside each loop ID
In off_limits_idCturnover_currUSDlast_modification_date2009/12/01
14:51:00corp_status_idQUOcreated_user9999999ultimate_parent_id2fullnameAbbott
LaboratoriesU_Size_Code1last_modification_by40001040turnover22476322created_datetime1978/01/01
00:00:00company_id2 loop
Inside each loop OffLimitsID
Inside each loop TurnoverCurrencyTypeID
Inside each loop RowModifiedDate
Inside each loop CorporateOwnershipTypeID
Inside each loop RowCreatedBy
Inside each loop GlobalUltimateID
Inside each loop Name
Inside each loop CorporateSizeTypeID
Inside each loop RowModifiedBy
Inside each loop TurnoverAmount
Inside each loop RowCreatedDate
Inside each loop ID
In off_limits_idFturnover_currUSDlast_modification_date2008/06/25
11:10:00corp_status_idQUOcreated_user2000734ultimate_parent_id1fullnameAAR
CorporationU_Size_Code1last_modification_by40000347turnover1061169created_datetime1988/10/17
00:00:00company_id1 loop
Inside each loop OffLimitsID
Inside each loop TurnoverCurrencyTypeID
Inside each loop RowModifiedDate
Inside each loop CorporateOwnershipTypeID
Inside each loop RowCreatedBy
Inside each loop GlobalUltimateID
Inside each loop Name
Inside each loop CorporateSizeTypeID
Inside each loop RowModifiedBy
Inside each loop TurnoverAmount
Inside each loop RowCreatedDate
Inside each loop ID
In off_limits_idCturnover_currUSDlast_modification_date2009/12/01
14:51:00corp_status_idQUOcreated_user9999999ultimate_parent_id2fullnameAbbott
LaboratoriesU_Size_Code1last_modification_by40001040turnover22476322created_datetime1978/01/01
00:00:00company_id2 loop
Inside each loop OffLimitsID
Inside each loop TurnoverCurrencyTypeID
Inside each loop RowModifiedDate
Inside each loop CorporateOwnershipTypeID
Inside each loop RowCreatedBy
Inside each loop GlobalUltimateID
Inside each loop Name
Inside each loop CorporateSizeTypeID
Inside each loop RowModifiedBy
Inside each loop TurnoverAmount
Inside each loop RowCreatedDate
Inside each loop ID
Loaded suite C:/Users/ecucropc/Documents/Visual Studio
2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest
Started
Inside assert_equal loop for test_company_CorporateOwnershipTypeID
FInside assert_equal loop for test_company_CorporateSizeTypeID
FInside assert_equal loop for test_company_GlobalUltimateID
.Inside assert_equal loop for test_company_ID
.Inside assert_equal loop for test_company_Name
.Inside assert_equal loop for test_company_OffLimitsID
FInside assert_equal loop for test_company_RowCreatedBy
.Inside assert_equal loop for test_company_RowCreatedDate
.Inside assert_equal loop for test_company_RowModifiedBy
.Inside assert_equal loop for test_company_RowModifiedDate
.Inside assert_equal loop for test_company_TurnoverAmount
.Inside assert_equal loop for test_company_TurnoverCurrencyTypeID
F
Finished in 0.029 seconds.
-
Failure:
test_company_CorporateOwnershipTypeID(TestSuite)
[C:/Users/ecucropc/Documents/Visual Studio
2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
<"QUO "> expected but was
<1>. -
Failure:
test_company_CorporateSizeTypeID(TestSuite)
[C:/Users/ecucropc/Documents/Visual Studio
2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
expected but was
<1>. -
Failure:
test_company_OffLimitsID(TestSuite) [C:/Users/ecucropc/Documents/Visual
Studio
2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
<âCâ> expected but was
. -
Failure:
test_company_TurnoverCurrencyTypeID(TestSuite)
[C:/Users/ecucropc/Documents/Visual Studio
2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
<âUSDâ> expected but was
<166>.
12 tests, 12 assertions, 4 failures, 0 errors
If I comment out the âdefine_methodâ block of code, it will continue
where I was expecting it to go.
Any help would be greatly appreciated.