Re: Rollback db changes in CFCUnit/CFUnit tests
Could someone post Rick's script? I am very interested in looking @ it. Thanks, ~| ColdFusion 8 - Build next generation apps today, with easy PDF and Ajax features - download now http://download.macromedia.com/pub/labs/coldfusion/cf8_beta_whatsnew_052907.pdf Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:291150 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Here is the ant script that I was referring to the properties file that powers it. Also included are the caveats that I gave Janet: A few caveats: 1. It is targeted specifically to MSSQL. 2. I am using the open source JTDS drivers ( http://jtds.sourceforge.net/) to access our databases. One problem I ran into when resetting our database was when constraints existed on existing tables so I use some MSSQL specific SQL to temporarily detach the constraints during the reset process. If you are not using MSSQL, you will need to change the insert operation to CLEAN_INSERT (if i remember correctly) as it is currently using MSSQL_CLEAN_INSERT in addition to updating the constraint code. I hope this helps you with what you are working on. Good luck! HTH, Rich Kroll *** Properties file (db-build.properties) *** db.driver=net.sourceforge.jtds.jdbc.Driver db.urlprefix=jdbc:jtds:sqlserver:// db.server=RKROLL db.port=1433 db.instance= db.database=MYDATABASE db.username=user db.password=password db.exportfile=dataset *** Build file (build.xml) *** project name=Build default=menu basedir=. taskdef name=dbunit classname=org.dbunit.ant.DbUnitTask / property file=db-build.properties / target name=menu depends=init echo MENU Available tasks: export: Exports the database to a flat xml file. (Should only be done on schema changes) export-dtd: Exports the database schema DTD reset: Reset the database to a last known good state disable-constraints:Disable database constraints enable-constraints: Enable database constraints /echo input message=Choose a task: validargs=export,export-dtd,reset,disable-constraints,enable-constraints defaultvalue=reset addproperty=task / antcall target=${task} inheritAll=true / /target !-- = target: INIT = -- target name=init description=-- Initilization property name=db.server value=RKROLL/ property name=db.port value=1433/ property name=db.instance value=/ property name=db.username value=sa/ property name=db.password value=password/ property name=db.exportfile value=dataset/ /target !-- = target: reset = -- target name=reset depends=init,disable-constraints description=-- resets the database to a last known good state echoPerforming database reset on ${db.server}:${db.port}/${db.database};instance=${db.instance}/echo echoclean insert beginning.../echo dbunit driver=${db.driver} url=${db.urlprefix}${db.server}:${db.port}/${db.database};instance=${db.ins tance} userid=${db.username} password=${db.password} operation type=MSSQL_CLEAN_INSERT src=${db.exportfile}.xml format=flat / /dbunit echoclean insert complete/echo echoenabling constraints.../echo antcall target=enable-constraints / echodatabase reset complete./echo /target !-- = target: export = -- target name=export depends=init echoAccessing DB [jdbc:jtds:sqlserver://${db.server}:${db.port}/${db.database};instance=${db. instance}]/echo dbunit driver=${db.driver} url=${db.urlprefix}${db.server}:${db.port}/${db.database};instance=${db.ins tance} userid=${db.username} password=${db.password} export dest=${db.exportfile}.xml / /dbunit /target !-- = target: export-dtd = -- target name=export-dtd depends=init description=-- Exports the database DTD dbunit driver=${db.driver} url=${db.urlprefix}${db.server}:${db.port}/${db.database};INSTANCE=${db.ins tance} userid=${db.username} password=${db.password} export dest=${db.exportfile}.dtd format=dtd/ /dbunit /target !-- = target: disable-constraints = -- target name=disable-constraints
Re: Rollback db changes in CFCUnit/CFUnit tests
http://www.barneyb.com/barneyblog/2007/07/13/schema-tool-update/ This is quite a useful tool for managing database migrations. Mark F ~| Get the answers you are looking for on the ColdFusion Labs Forum direct from active programmers and developers. http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid-72catid=648 Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:291155 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: Rollback db changes in CFCUnit/CFUnit tests
+1 to dbunit. You also have the option of wrapping each unit test in a transaction and then rolling it back at the end. Jaime Metcher Yes, that works too. In this case dbUnit's restore capability is a better fit. I got a good quickstart to dbUnit thanks to Rich's script and I'm really liking it so far :) Thanks for the suggestion guys. Janet ~| Enterprise web applications, build robust, secure scalable apps today - Try it now ColdFusion Today ColdFusion 8 beta - Build next generation apps Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290609 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Janet, +1 to dbunit. You also have the option of wrapping each unit test in a transaction and then rolling it back at the end. Jaime Metcher -Original Message- From: Janet MacKay [mailto:[EMAIL PROTECTED] Sent: Friday, 5 October 2007 3:28 AM To: CF-Talk Subject: SOT: Rollback db changes in CFCUnit/CFUnit tests Does anyone know of an article(s) explaining how to work rollbacks into unit testing? I want to test a series of DAO's, but am not sure how to incorporate this into my tests. Janet ~| ColdFusion is delivering applications solutions at at top companies around the world in government. Find out how and where now http://www.adobe.com/cfusion/showcase/index.cfm?event=finderproductID=1522loc=en_us Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290488 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: SOT: Rollback db changes in CFCUnit/CFUnit tests
On 10/4/07, Janet MacKay [EMAIL PROTECTED] wrote: Does anyone know of an article(s) explaining how to work rollbacks into unit testing? I want to test a series of DAO's, but am not sure how to incorporate this into my tests. Broadly speaking, depending on what you're testing, mock objects may be enough. If the goal is to test the objects then that's probably enough. If you need to actually test the CRUD code itself, then you might want to look at DBUnit for managing database state. There's some fine articles on IBM developerWorks and similar places -- it's pretty simple to use it to restore a database to a known state. Janet ~| Download the latest ColdFusion 8 utilities including Report Builder, plug-ins for Eclipse and Dreamweaver updates. http;//www.adobe.com/cfusion/entitlement/index.cfm?e=labs%5adobecf8%5Fbeta Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290298 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Thanks Rich. That is helpful. Off to download and review DBUnit. Thanks, Janet Janet, If you would like, I have a (work in progress) ant build file that uses dbunit's ant task to export / reset my database. I would be happy to email it to you offlist if you think it might be useful. HTH, Rich Kroll ~| ColdFusion 8 - Build next generation apps today, with easy PDF and Ajax features - download now http://download.macromedia.com/pub/labs/coldfusion/cf8_beta_whatsnew_052907.pdf Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290301 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Re: Rollback db changes in CFCUnit/CFUnit tests
Rich, That would be great. Thanks. Janet ~| ColdFusion 8 - Build next generation apps today, with easy PDF and Ajax features - download now http://download.macromedia.com/pub/labs/coldfusion/cf8_beta_whatsnew_052907.pdf Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290318 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Rich, That would be great. Thanks. Janet No problem. It should be on its way. Let me know if I can be of any more help. Rich Kroll ~| Get involved in the latest ColdFusion discussions, product development sharing, and articles on the Adobe Labs wiki. http://labs/adobe.com/wiki/index.php/ColdFusion_8 Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290350 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
SOT: Rollback db changes in CFCUnit/CFUnit tests
Does anyone know of an article(s) explaining how to work rollbacks into unit testing? I want to test a series of DAO's, but am not sure how to incorporate this into my tests. Janet ~| ColdFusion 8 - Build next generation apps today, with easy PDF and Ajax features - download now http://download.macromedia.com/pub/labs/coldfusion/cf8_beta_whatsnew_052907.pdf Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290207 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Does anyone know of an article(s) explaining how to work rollbacks into unit testing? I want to test a series of DAO's, but am not sure how to incorporate this into my tests. Janet You can incorporate a tool like DBUnit into your workflow (http://dbunit.sourceforge.net/). HTH, Rich Kroll ~| ColdFusion is delivering applications solutions at at top companies around the world in government. Find out how and where now http://www.adobe.com/cfusion/showcase/index.cfm?event=finderproductID=1522loc=en_us Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290213 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4
Re: Rollback db changes in CFCUnit/CFUnit tests
You can incorporate a tool like DBUnit into your workflow (http://dbunit.sourceforge.net/). HTH, Rich Kroll Thanks. I'm new to unit testing in general, so sorry if this is a dumb question :) .. I think I understand the concept of DBUnit, but I can't visualize where it fits into picture. Are DBUnit tests something separate, written in java, or do they somehow tie into my CFUnit/CFCUnit tests? Can you give me a high-level description of how it hooks into the process? Janet ~| ColdFusion is delivering applications solutions at at top companies around the world in government. Find out how and where now http://www.adobe.com/cfusion/showcase/index.cfm?event=finderproductID=1522loc=en_us Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290215 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
RE: Rollback db changes in CFCUnit/CFUnit tests
Thanks. I'm new to unit testing in general, so sorry if this is a dumb question :) .. I think I understand the concept of DBUnit, but I can't visualize where it fits into picture. Are DBUnit tests something separate, written in java, or do they somehow tie into my CFUnit/CFCUnit tests? Can you give me a high-level description of how it hooks into the process? Janet -- disclaimer -- I am not a DBUnit expert, and am only using a small portion of its features! -- end disclaimer -- With that said...I will give you an overview of how I am using DBUnit. Step 1: I start by seeding my database. Once that is done I use DBUnit to export a snapshot of the database. Step 2: Proceed to develop new features, bug fixes, etc. Step 3: When development is complete and prior to running my unit tests, I use DBUnit to reset the db back to a last known good state to remove any data that was inserted during development. Step 4: I run my unit tests that test functionality with limited / no data and let my unit tests populate the db. This allows for testing of how the system performs with and without expected data. Step 5: I run a cleanup script that includes a DBUnit reset. Step 6: goto step 2 and repeat. HTH, Rich Kroll ~| Create robust enterprise, web RIAs. Upgrade to ColdFusion 8 and integrate with Adobe Flex http://www.adobe.com/products/coldfusion/flex2/?sdid=RVJP Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290221 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Re: Rollback db changes in CFCUnit/CFUnit tests
Thanks Rich. That is helpful. Off to download and review DBUnit. Thanks, Janet ~| Check out the new features and enhancements in the latest product release - download the What's New PDF now http://download.macromedia.com/pub/labs/coldfusion/cf8_beta_whatsnew_052907.pdf Archive: http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:290226 Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4