Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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