Newbie

I am very new to development and even more in the dark when it comes to
Ruby, but I am still having fun. :wink: 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.

  1. Failure:
    test_company_CorporateOwnershipTypeID(TestSuite)
    [C:/Users/ecucropc/Documents/Visual Studio
    2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
    <"QUO "> expected but was
    <1>.

  2. Failure:
    test_company_CorporateSizeTypeID(TestSuite)
    [C:/Users/ecucropc/Documents/Visual Studio
    2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
    expected but was
    <1>.

  3. Failure:
    test_company_OffLimitsID(TestSuite) [C:/Users/ecucropc/Documents/Visual
    Studio
    2008/Projects/DataSynchronisation/DataSynchronisation/CommonTest.rb:57]:
    <“C”> expected but was
    .

  4. 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.