Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
Ruby
Newbie: Control flow of tests using 'define_method'
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Chris Cropleu, post: 4662705"] 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: [URL]http://www.ruby-forum.com/topic/204730[/URL] 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]: <nil> 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 <nil>. 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. [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
Ruby
Newbie: Control flow of tests using 'define_method'
Top