1 / 33

Building a Testable Data Access Layer

Building a Testable Data Access Layer. Todd Anglin Chief Evangelist, Telerik. Level: Intermediate. Introductions. Todd Anglin Chief Evangelist, Telerik Microsoft MVP ASP Insider President NHDNUG & O’Reilly Author. TelerikWatch.com. @toddanglin. today’s plan. what is a “data layer”?.

august
Download Presentation

Building a Testable Data Access Layer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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 & O’Reilly Author TelerikWatch.com @toddanglin

  3. today’s plan

  4. what is a “data layer”?

  5. Data Layer Responsible for talking to “persistence layer” Presentation Web Desktop Service Domain Logic(“the code that makes you money”) Data / Model Persistence Database Cloud XML Etc.

  6. why build a data layer? what’s the benefit?

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

  8. Presentation Web Desktop Service Domain Logic(“the code that makes you money”) Data Persistence Database Cloud XML Etc.

  9. a good data layer…

  10. Handles all data access • Hides implementation • Flexible • Easy to refactor

  11. a bad data layer is…

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

  13. how do we build “data layers”?

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

  15. popular .NET ORMs

  16. Build data layer with LinqToSql & EF & OpenAccess Demo

  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. Add data access pattern to project Demo

  19. testing the data layer

  20. two testing camps A B Test Database 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. “Test” Database • Pros • Catches more issues • Familiar • Cons • Slow • Not a “unit” test • Mocking • Pros • Unit test • Isolate concerns • Fast • Cons • “Hides” issues • Does not test database logic picking a camp

  22. UNIT TEST “Isolated. Repeatable. Fast.” INTEGRATION TEST “Test interaction between units.” FUNCTIONAL TEST “Test behavior from user perspective.”

  23. B mock testing Goal: Test your business logic UI Behaviors Services Business Code Repository Database Communication(ORM, ADO.NET, etc.) Database

  24. mocking • Stunt doubles for real objects • Look the same on the outside Mocking Tools: JustMock (by Telerik) Isolator (by TypeMock) MOQ (OSS) RhinoMocks (OSS)

  25. AAA mocking pattern //Arrange Set-up your test variables and mocks //Act Execute your code like normal //Assert Verify what happened

  26. Testing L2S with Mock Objects DEMO: MOCKING DATABASE

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

  28. hard parts • Creating test schema/data • DbUnit • Speed • In memory database • SQL Lite, SQL CE, etc.

  29. rules for test database 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

  30. Creating integration tests to talk to real database DEMO: TESTinG with real DB

  31. should you test your DAL?

  32. Q&A anglin@telerik.com @toddanglin telerikwatch.com

  33. Links • 4GuysFromRolla on Testing 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/

More Related