Building a testable data access layer
Download
1 / 33

Building a Testable Data Access Layer - PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on

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”?.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Building a Testable Data Access Layer' - august


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Building a testable data access layer

Building a Testable Data Access Layer

Todd Anglin

Chief Evangelist, Telerik

Level: Intermediate


Introductions
Introductions

Todd Anglin

Chief Evangelist, Telerik

Microsoft MVP

ASP Insider

President NHDNUG & O’Reilly Author

TelerikWatch.com

@toddanglin




Data layer
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.


Why build a data layer
why build a data layer?

what’s the benefit?


Importance of data layer
importance of data layer

  • Decouple application from persistence

    = easier maintenance

    = improved testability

    = greater reusability


Building a testable data access layer

Presentation

Web

Desktop

Service

Domain Logic(“the code that makes you money”)

Data

Persistence

Database

Cloud

XML

Etc.


A good data layer
a good data layer…


Building a testable data access layer

  • Handles all data access

  • Hides implementation

  • Flexible

    • Easy to refactor


A bad data layer is
a bad data layer is…


Building a testable data access layer



Building a testable data access layer

  • By Hand

  • Pros

  • POCO

  • YAGNI

  • No-RTFM

  • Cons

  • Time

  • No FM

  • ORM

  • Pros

  • Time

  • Flexible

  • Cons

  • Learning

  • Limits

  • Trust*




Data layer patterns
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




Two testing camps
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


Picking a camp

  • Mocking

  • Pros

  • Unit test

  • Isolate concerns

  • Fast

  • Cons

  • “Hides” issues

  • Does not test database logic

picking a camp


Unit test
UNIT TEST

“Isolated. Repeatable. Fast.”

INTEGRATION TEST

“Test interaction between units.”

FUNCTIONAL TEST

“Test behavior from user perspective.”


Mock testing

B

mock testing

Goal: Test your business logic

UI Behaviors

Services

Business Code

Repository

Database Communication(ORM, ADO.NET, etc.)

Database


Mocking
mocking

  • Stunt doubles for real objects

    • Look the same on the outside

Mocking Tools:

JustMock (by Telerik)

Isolator (by TypeMock)

MOQ (OSS)

RhinoMocks (OSS)


Aaa mocking pattern
AAA mocking pattern

//Arrange

Set-up your test variables and mocks

//Act

Execute your code like normal

//Assert

Verify what happened


Demo mocking database

Testing L2S with Mock Objects

DEMO: MOCKING DATABASE


Test database

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


Hard parts
hard parts

  • Creating test schema/data

    • DbUnit

  • Speed

    • In memory database

    • SQL Lite, SQL CE, etc.


Rules for test database tests
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




Building a testable data access layer

Q&A

anglin@telerik.com

@toddanglin

telerikwatch.com


Links
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/