Download Title of chapter

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Visual Studio for Database Professionals
MSDN TechTalk
M. Lattmann, Consultant
Wallisellen, 4.12.2006
Basel
·
Baden
·
Bern
·
Lausanne
·
Zürich
·
Düsseldorf
·
Frankfurt/M.
·
Freiburg i. Br.
·
Hamburg
·
München
·
Stuttgart
Agenda

Data Generation


Database Unit Testing


Knowledge
transfer is only
the beginning.
Knowledge
application is
what counts.

Kurs- bzw. TC-Namen eingeben
Creating Unit Tests
Extending Unit Tests
Extensibility




Generating Test Data
Generator Extensibility
Distributor Extensibility
Conditions Extensibility
Core messages
2
© 2006
Demo
Generating Test Data
Kurs- bzw. TC-Namen eingeben
3
© 2006
Generating Test Data
 Value generators
 Simple generators for each data type






Strings: ASCII and Unicode ((var)char, n(var)char, (n)text)
Numbers: tinyint, smallint, int, bigint, real, float, decimal, numeric, money
Binary ((var)binary, image)
Date and Time
UniqueIdentifier (GUID)
Bit
 Complex generators
 Foreign Key, Regular Expression, Data Bound Generator
 Distributions
 Uniform, Normal, NormalInverse, Exponential, ExponentialInverse
 Can import column distributions from production database (*)
Kurs- bzw. TC-Namen eingeben
(*) Not implemented in CTP7
4
© 2006
Agenda

Data Generation


Database Unit Testing


Knowledge
transfer is only
the beginning.
Knowledge
application is
what counts.

Kurs- bzw. TC-Namen eingeben
Creating Unit Tests
Extending Unit Tests
Extensibility




Generating Test Data
Generator Extensibility
Distributor Extensibility
Conditions Extensibility
Core messages
5
© 2006
Unit Testing
 Do changes break your existing code?
 Tests for
 Stored Procedures, Functions
 Triggers
 Any SQL
 Unit test designer is SQL focused
 Work in the language of your choice: T-SQL, C#, VB.NET
 Builds on existing Unit Test functionality in Team System
 Works together with your application tier unit tests
 Well established in .NET development
Kurs- bzw. TC-Namen eingeben
6
© 2006
Database Unit Testing
 Automatically generate unit tests stubs for:
 Stored Procedures, Functions, Triggers
 Test Validation (assertions)
 T-SQL (server based) Assertions
 RAISERROR command
 Client Side Assertions
 None Empty ResultSet
 Row Count
 Execution Time, …
Kurs- bzw. TC-Namen eingeben
7
© 2006
Demo
Unit Testing
Kurs- bzw. TC-Namen eingeben
8
© 2006
Pre & Post Test Scripts
 Automatic Deployment Integration
 Automatically deploy database project prior to running tests
 Data Generation Integration
 Automatically generate data based on generation plan prior to
running tests
 Test Scripts use standard Team System Unit Tests
 Pre- und Post Test Scripts are specific for a single unit Test.
TestInitialize() and TestCleanup() are common within a test class.
 Generated Code can be extended using C# or VB.NET
Kurs- bzw. TC-Namen eingeben
9
© 2006
Pre & Post Test Scripts
Per test project
(DatabaseSetup.cs)
Per test class
per Test
Per Test
Kurs- bzw. TC-Namen eingeben
[AssemblyInitialize]
...
DeployDatabaseProject();
GenerateData();
[TestInitialize] Common Script
[Test]
Pre-Test 1
Test 1
Post-Test 1
[TestCleanup()] Common Script
[TestInitialize()] Common Script
[Test]
Pre-Test 2
Test 2
Post-Test 2
[TestCleanup()] Common Script
[AssemblyCleanup]
...
10
<DatabaseUnitTesting>
<DatabaseDeployment ...
<DataGeneration ...
</DatabaseUnitTesting>
App.config
© 2006
Managing Transactions in Unit Tests

Capability of putting tests in automatic rollback mode to always
maintain original state of database

Implementation in T-SQL
BEGIN TRANSACTION TestTransaction
UPDATE "Order Details" set Quantity = Quantity + 10
IF @@ROWCOUNT!=50
RAISERROR('Row count does not equal 50',16,1)
ROLLBACK TRANSACTION TestTransaction
Kurs- bzw. TC-Namen eingeben
11
© 2006
Managing Transactions in Unit Tests

C#, per Test
[TestMethod()]
public void dbo_InsertTable1Test()
{
CommittableTransaction tx = new CommittableTransaction();
ExecutionContext.Connection.EnlistTransaction(tx);
PrivilegedContext.Connection.EnlistTransaction(tx);
// run tests
tx.Rollback();
}
Kurs- bzw. TC-Namen eingeben
12
© 2006
Managing Transactions in Unit Tests
 C#, for all Tests
TransactionScope _trans;
[TestInitialize()]
public void Init() {
_trans = new TransactionScope();
base.InitializeTest();
}
[TestCleanup()]
public void Cleanup()
{
base.CleanupTest();
_trans.Dispose();
}
Kurs- bzw. TC-Namen eingeben
13
© 2006
Demo
Extending Unit Tests
Kurs- bzw. TC-Namen eingeben
14
© 2006
Agenda

Data Generation


Database Unit Testing


Knowledge
transfer is only
the beginning.
Knowledge
application is
what counts.

Kurs- bzw. TC-Namen eingeben
Creating Unit Tests
Extending Unit Tests
Extensibility




Generating Test Data
Generator Extensibility
Distributor Extensibility
Conditions Extensibility
Core messages
15
© 2006
Generator Extensibility
 Team System has many Extension Points
 Generator Extensibility is just an Example
 Implemented by .NET Developer
 Used by DB Professional
Kurs- bzw. TC-Namen eingeben
16
© 2006
Data Generator Extensibility
 Generators
 Implement:
 IDesigner
 IGenerator
 Base class
 Generator
 Attributes
 GeneratorAttribute
 GeneratorNameAttribute
 Distributions
 Implement:
 IDistribution
 Conditions
 Implement:
 ICondition
Kurs- bzw. TC-Namen eingeben
17
© 2006
Registration
 Generators and Distributions have to:
 Live in or under the: %ProgramFiles%\Microsoft Visual Studio
8\DBPro\Extensions directory
 Get registered in the %ProgramFiles%\Microsoft Visual Studio
8\DBPro\Microsoft.VisualStudio.TeamSystem.Data.Extensions.xml file
 Be strong key signed
<?xml version="1.0" encoding="us-ascii"?>
<types version="1">
<type>Microsoft.VisualStudio.TeamSystem.Data.Generators.RegexString,
Microsoft.VisualStudio.TeamSystem.Data.Generators,
Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</type>
<type>Microsoft.VisualStudio.TeamSystem.Data.Generators.Exponential,
Microsoft.VisualStudio.TeamSystem.Data.Generators,
Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</type>
</types>
Kurs- bzw. TC-Namen eingeben
18
© 2006
Demo
Generator Extensibility
Kurs- bzw. TC-Namen eingeben
19
© 2006
Core messages

All Tasks of DB Developers integrated in
the Team System Lifecycle


Strong Support of Database Changes


Data are always
part of the game.


Unit Tests, Data Generation
Integrated in MSBuild

Kurs- bzw. TC-Namen eingeben
Automatically generate Change Scripts
Repository, Versioning
Strong Testing Features


Less support for DBAs and DB Architects
Automated Regression Tests
Extensible
20
© 2006
Pricing, Licensing and Availability
 CTP 7 Available Today
 Availability for MSDN Universal Subscribers
 Around 8. Dec 2006
 General availability in January 2007:
 Included in Team Suite at No Extra Cost
 Purchase as an individual Edition
 Same pricing as other Team System Editions
Kurs- bzw. TC-Namen eingeben
21
© 2006
Literature

Kurs- bzw. TC-Namen eingeben
Ambler, Sadalage: Refactoring
Databases: Evolutionary Database
Design
22
© 2006
Related documents