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