際際滷

際際滷Share a Scribd company logo
ALM@Work 2014

Unit testing con Visual Studio
Massimiliano DAmico
http://codeimprovements.wordpress.com
mdamico@progesoftware.it
@prodvit


ALM@Work 2014
ALM@Work 2014

Agenda
Test Driven
Development

Unit testing &
TDD

Mock, stub e
shim

Testing
Framework

MS Fakes

Demo
Test-Driven Development (TDD)

ALM@Work 2014

TDD: processo di scrittura del codice in cui lo
sviluppo del software 竪 guidato dalla stesura
di test automatici.
Pensa
(Scrivi i
tests)

Red tests

Green
tests

Refactor

Tests must focus on the class' behavior, not its implementation.

http://www.jamesshore.com/Agile-Book/test_driven_development.html
Unit Testing & TDD

ALM@Work 2014

Focus sulla classe o sul metodo
Unit

Da sistemi o moduli esterni
Isolamento

Separazione
Automatizzazion
e

Tra interfaccia e
implementazione

Run ad ogni build
Mock, stub e 

ALM@Work 2014

Oggetti preimpostati mediante calls
expectations per effettuare la
behaviour verification.

Mock

Oggetti che simulano la logica del
sistema per effettuare la state
verification.

Stub

Oggetti che implementano
linterfaccia delloggetto reale,
implementandone parte della logica
per effettuare la state verification.

Fakes

http://martinfowler.com/articles/mocksArentStubs.html
 shim!
Libreria o modulo software che in
modo trasparente per
lutilizzatore:
 intercetta le chiamate ad una
specifica API
 gestisce in autonomia la
chiamata stessa
 trasforma i parametri
 redirige il flusso di
esecuzione.

ALM@Work 2014

Microsoft
Windows
Application
Compatibility
Toolkit (ACT)

WINE
Stub o Mock?

WarehouseStub warehouse = new WarehouseStub();
warehouse.HasInventory = ()=>{return false};
order.fill(warehouse);
Assert.IsFalse(order.IsFilled());

WarehouseMock mock = new
WarehouseMock(typeof(Warehouse));
warehouse.expects(once()).method(HasInventory")
.withAnyArguments() .will(returnValue(false));
order.fill(mock.Instance);
mock.VerifyExpectations();

ALM@Work 2014

Stub

Mock
Framework/Lib .Net per unit
testing

ALM@Work 2014

Framework

Free/Commercial

Features

xUnit.net

Free (open source)

Assertions, Attributes

SpecFlow

Free (open source)

Assertions, Specification DSL

NUnit

Free (open source)

Assertions, Attributes

csUnit

Free (open source)

Assertions, Attributes

MSTest

Free

Assertions, Attributes

Library

Free/Commercial

Mocks/Stubs

Typemock Isolator

Commercial

Mock

Telerik JustMock

Commercial

Mock

Rhino Mocks

Free (open source)

Mock/Stub

Moq

Free (open source)

Mock

MS Fakes

Free

Stub (mock?)
Microsoft Fakes Framework

ALM@Work 2014

MFF consente di isolare il codice di cui si sta
eseguendo il test sostituendo moduli e/o
librerie esterne mediante stubs o shims.
1. Inject interfaces
2. Add Fakes Assemblies
3. (Create a ShimContext) Construct
instances of the stub/shim and provide
code for its methods
ALM@Work 2014

DEM
O
ALM@Work 2014

Da un grande potere, derivano grandi
responsabilit
Grazie agli sponsor

ALM@Work 2014
ALM@Work 2014

Per voi sono solo 10 minuti persi, per noi
竪 utilissimo per poter crescere e
migliorare!

http://tinyurl.com/ALMAW14

More Related Content

Unit testing in Visual Studio 2013

  • 1. ALM@Work 2014 Unit testing con Visual Studio Massimiliano DAmico http://codeimprovements.wordpress.com mdamico@progesoftware.it @prodvit ALM@Work 2014
  • 2. ALM@Work 2014 Agenda Test Driven Development Unit testing & TDD Mock, stub e shim Testing Framework MS Fakes Demo
  • 3. Test-Driven Development (TDD) ALM@Work 2014 TDD: processo di scrittura del codice in cui lo sviluppo del software 竪 guidato dalla stesura di test automatici. Pensa (Scrivi i tests) Red tests Green tests Refactor Tests must focus on the class' behavior, not its implementation. http://www.jamesshore.com/Agile-Book/test_driven_development.html
  • 4. Unit Testing & TDD ALM@Work 2014 Focus sulla classe o sul metodo Unit Da sistemi o moduli esterni Isolamento Separazione Automatizzazion e Tra interfaccia e implementazione Run ad ogni build
  • 5. Mock, stub e ALM@Work 2014 Oggetti preimpostati mediante calls expectations per effettuare la behaviour verification. Mock Oggetti che simulano la logica del sistema per effettuare la state verification. Stub Oggetti che implementano linterfaccia delloggetto reale, implementandone parte della logica per effettuare la state verification. Fakes http://martinfowler.com/articles/mocksArentStubs.html
  • 6. shim! Libreria o modulo software che in modo trasparente per lutilizzatore: intercetta le chiamate ad una specifica API gestisce in autonomia la chiamata stessa trasforma i parametri redirige il flusso di esecuzione. ALM@Work 2014 Microsoft Windows Application Compatibility Toolkit (ACT) WINE
  • 7. Stub o Mock? WarehouseStub warehouse = new WarehouseStub(); warehouse.HasInventory = ()=>{return false}; order.fill(warehouse); Assert.IsFalse(order.IsFilled()); WarehouseMock mock = new WarehouseMock(typeof(Warehouse)); warehouse.expects(once()).method(HasInventory") .withAnyArguments() .will(returnValue(false)); order.fill(mock.Instance); mock.VerifyExpectations(); ALM@Work 2014 Stub Mock
  • 8. Framework/Lib .Net per unit testing ALM@Work 2014 Framework Free/Commercial Features xUnit.net Free (open source) Assertions, Attributes SpecFlow Free (open source) Assertions, Specification DSL NUnit Free (open source) Assertions, Attributes csUnit Free (open source) Assertions, Attributes MSTest Free Assertions, Attributes Library Free/Commercial Mocks/Stubs Typemock Isolator Commercial Mock Telerik JustMock Commercial Mock Rhino Mocks Free (open source) Mock/Stub Moq Free (open source) Mock MS Fakes Free Stub (mock?)
  • 9. Microsoft Fakes Framework ALM@Work 2014 MFF consente di isolare il codice di cui si sta eseguendo il test sostituendo moduli e/o librerie esterne mediante stubs o shims. 1. Inject interfaces 2. Add Fakes Assemblies 3. (Create a ShimContext) Construct instances of the stub/shim and provide code for its methods
  • 11. ALM@Work 2014 Da un grande potere, derivano grandi responsabilit
  • 13. ALM@Work 2014 Per voi sono solo 10 minuti persi, per noi 竪 utilissimo per poter crescere e migliorare! http://tinyurl.com/ALMAW14