The document discusses the importance and construction of a data access layer (DAL) in application development, emphasizing its role in decoupling applications from data persistence for better maintenance, testability, and reusability. It outlines different patterns and testing methodologies, including unit and integration tests, and introduces mocking techniques for testing. The author provides insights on the pros and cons of various ORM tools, along with resources for further learning.
Data Layer Responsiblefor talking to “persistence layer” Presentation Web Desktop Domain Logic (“the code that makes you money”) Data / Model Service Persistence Database Cloud XML Etc.
data layer patternsDomain Driven Design (DDD) Key concepts: Repositories act on model ActiveRecord Key concepts: Model objects act on themselves Data Mapper Key concepts: Objects mapped to tables
two testing campsConcepts: Test against “real” database Use set-up/tear-down code to create test data Good When… You put lots of logic in your database Concepts: Test against “fake” database Isolates your code from database behavior Good When… You want fast unit tests and you put most logic in code A Test Database B Mock Database
21.
picking a campMocking Pros Unit test Isolate concerns Fast Cons “ Hides” issues Does not test database logic “ Test” Database Pros Catches more issues Familiar Cons Slow Not a “unit” test
UNIT TEST “Isolated. Repeatable. Fast.” INTEGRATION TEST “ Test interaction between units.” FUNCTIONAL TEST “ Test behavior from user perspective.”
24.
mock testing Goal:Test your business logic B Database Communication (ORM, ADO.NET, etc.) Repository Business Code UI Behaviors Services Database
25.
mocking Stunt doublesfor real objects Look the same on the outside Mocking Tools: JustMock (by Telerik) Isolator (by TypeMock) MOQ (OSS) RhinoMocks (OSS)
26.
AAA mocking pattern//Arrange Set-up your test variables and mocks //Act Execute your code like normal //Assert Verify what happened
test database Goal:Test your business logic + database behavior A Steps for every test: Create database schema + test data (Optional) Test database setup correctly Execute unit test code Verify database behaved correctly
29.
hard parts Creatingtest schema/data DbUnit Speed In memory database SQL Lite, SQL CE, etc.
30.
rules for testdatabase tests Prior to running tests, schema should be redeployed to test DB (+ test data) Tests should not change existing data Edits, Deletes should be on records created by test Original data should be read-only Tests should not depend on changes from previous tests
31.
DEMO: TESTING WITHREAL DB Creating integration tests to talk to real database
Links 4GuysFromRolla onTesting DAL (2005) http:// aspnet.4guysfromrolla.com/articles/040605-1.2.aspx Unit Testing the DAL (Java, but great discussion of DAL data testing) http:// www.buunguyen.net/blog/unit-testing-the-data-access-layer.html Roy Osherove on using Mocks for DAL testing http://weblogs.asp.net/rosherove/archive/2003/09/30/29734.aspx SQL Lite project page http:// www.sqlite.org/docs.html System.Data.SQLite: http://sqlite.phxsoftware.com / http ://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins / http://hendryluk.wordpress.com/2008/10/07/data-access-test-with-sqlite/ DbUnit.NET (last updated 2006 – still alpha) http:// dbunit-net.sourceforge.net/GettingStarted.html SQL Server Compact 4 CTP1 (2010) http:// www.microsoft.com/downloads/details.aspx?FamilyID=0d2357ea-324f-46fd-88fc-7364c80e4fdb&displaylang=en http:// robtiffany.com/sql-server-compact/here-comes-sql-server-compact-4-0 SQL Script to clear all tables in database http:// www.smallworkarounds.net/2009/02/script-to-delete-all-data-from-sql.html Microsoft.SqlServer.Management.Smo primer http:// davidhayden.com/blog/dave/archive/2006/01/27/2774.aspx http:// social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/43e8bc3a-1132-453b-b950-09427e970f31 Multi-tier L2S architecture ideas http://blog.stevensanderson.com/2007/11/29/linq-to-sql-the-multi-tier-story/