Presentation is loading. Please wait.

Presentation is loading. Please wait.

Building a Testable Data Access Layer Todd Anglin Chief Evangelist, Telerik Level: Intermediate.

Similar presentations


Presentation on theme: "Building a Testable Data Access Layer Todd Anglin Chief Evangelist, Telerik Level: Intermediate."— Presentation transcript:

1 Building a Testable Data Access Layer Todd Anglin Chief Evangelist, Telerik Level: Intermediate

2 Introductions Todd Anglin Chief Evangelist, Telerik Microsoft MVP ASP Insider President NHDNUG & OReilly TelerikWatch.com

3 todays plan Define Data Layer Data Layer Options Build Data Layer Testing Data Operations

4 what is a data layer?

5 Presentation Data Layer Responsible for talking to persistence layer WebDesktop Domain Logic (the code that makes you money) Data / Model Persistence DatabaseCloudXMLEtc. Service

6 why build a data layer? whats the benefit?

7 importance of data layer Decouple application from persistence = easier maintenance = improved testability = greater reusability

8 Presentation WebDesktop Domain Logic (the code that makes you money) Data Persistence DatabaseCloudXMLEtc. Service

9 a good data layer…

10 1. Handles all data access 2. Hides implementation 3. Flexible –Easy to refactor

11 a bad data layer is…

12 1. Does not centralize data access 2. Makes application very dependent on persistent store 3. Easy*

13 how do we build data layers?

14 By Hand Pros -POCO -YAGNI -No-RTFM Cons -Time -No FM By Hand Pros -POCO -YAGNI -No-RTFM Cons -Time -No FM ORM Pros -Time -Flexible Cons -Learning -Limits -Trust* ORM Pros -Time -Flexible Cons -Learning -Limits -Trust*

15 popular.NET ORMs Microsoft LinqToSQL Entity Framework Open Source nHibernate Commercial Telerik OpenAccess LLBGenPro EntitySpaces

16 DEMO Build data layer with LinqToSql & EF & OpenAccess

17 data layer patterns Domain 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

18 DEMO Add data access pattern to project

19 testing the data layer

20 two testing camps A Test Database B Mock Database Concepts: 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

21 Mocking Pros -Unit test -Isolate concerns -Fast Cons -Hides issues -Does not test database logic Mocking 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 Test Database Pros -Catches more issues -Familiar Cons -Slow -Not a unit test picking a camp

22 testing considerations What is a unit test? What are other types of testing?

23 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 doubles for 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

27 DEMO: MOCKING DATABASE Testing L2S with Mock Objects

28 test database Goal: Test your business logic + database behavior A Steps for every test: 1.Create database schema + test data 2.(Optional) Test database setup correctly 3.Execute unit test code 4.Verify database behaved correctly

29 hard parts 1. Creating test schema/data –DbUnit 2. Speed –In memory database –SQL Lite, SQL CE, etc.

30 rules for test database tests 1. Prior to running tests, schema should be redeployed to test DB (+ test data) 2. Tests should not change existing data –Edits, Deletes should be on records created by test –Original data should be read-only 3. Tests should not depend on changes from previous tests

31 DEMO: TESTING WITH REAL DB Creating integration tests to talk to real database

32 should you test your DAL?

33 @toddanglin telerikwatch.com Q&AQ&A

34 Links 4GuysFromRolla on Testing DAL (2005) –http://aspnet.4guysfromrolla.com/articles/ aspxhttp://aspnet.4guysfromrolla.com/articles/ aspx Unit Testing the DAL (Java, but great discussion of DAL data testing) –http://www.buunguyen.net/blog/unit-testing-the-data-access-layer.htmlhttp://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.aspxhttp://weblogs.asp.net/rosherove/archive/2003/09/30/29734.aspx SQL Lite project page –http://www.sqlite.org/docs.htmlhttp://www.sqlite.org/docs.html –System.Data.SQLite: –http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/ –http://hendryluk.wordpress.com/2008/10/07/data-access-test-with-sqlite/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.htmlhttp://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=enhttp://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-0http://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.htmlhttp://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.aspxhttp://davidhayden.com/blog/dave/archive/2006/01/27/2774.aspx –http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/43e8bc3a b-b e970f31http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/43e8bc3a b-b e970f31 Multi-tier L2S architecture ideas –http://blog.stevensanderson.com/2007/11/29/linq-to-sql-the-multi-tier-story/http://blog.stevensanderson.com/2007/11/29/linq-to-sql-the-multi-tier-story/


Download ppt "Building a Testable Data Access Layer Todd Anglin Chief Evangelist, Telerik Level: Intermediate."

Similar presentations


Ads by Google