BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems)" by Heine...

Preview:

DESCRIPTION

Presentation from November 2011 BizSparkSF Meetup entitled "Tools, Tools and More Tools!" http://www.bizsparksf.com/events/34653282/

Citation preview

Loopt

1

Heine Frifeldt <heine@loopt.com>

Server Team Manager

Tools used for testing

2

Loopt - Connecting You with the Places You Go

Kiln for source control, wiki and bug tracking

3

DB Schema in Mercurial via RedGate SQL Source Control

4

Unit tests via Visual Studio 2010

5

Continuous builds via Jenkins

6

Nightly Functional Tests via custom attribute

[TestMethod, ExecuteNightly]public void FacebookSearch(){

var adapter = new FacebookAdapter();

var places = adapter.Search(coords, 10000);Assert.IsTrue(places.Count() > 0);

7

Hard to test code that uses statics

public Configuration GetConfiguration(){

string[] conf = File.ReadAllLines("Config.xml");

// parse contents and construct Configuration obj

8

Constructors as like static methodsKeep them simple

public class User{

public User(int userId) {

DataProvider provider = new DataProvider();

var data = provider.GetUserInfo(userId);

…}

9

Hard to test code that has object initialization inside business logic

public Deal[] GetGrouponDeals(){

WebClient client = new WebClient();

// Logic to retrieve and parse the response

…}

10

Separate object graph from logicIe. remove new operators

public GrouponAdapter(ILooptWebClient webClient)

{_webClient = webClient;

}

public Deal[] GetGrouponDeals(){

// Use _webClient to retrieve URL…

11

Dependency injection Test able code

[TestMethod]public void VerifyDeals(){

var testClient = new TestWebClient();

var groupon = new GrouponAdapter(testClient);

// Now you control the URL response…

}

12

Root of application will have logic to construct object graphs

public CoreService(IDealManager dealManager,IUserManager userManager,…

public DealManager(IGrouponAdapter grouponAdapter,IDataProvider dataProvider,IPoiController poiController)

13

Use “Ninject” to construct object graph

…_kernel.Get<GrouponAdapter>();…

14

Use “Ninject” to construct object graph

Bind<ILooptWebClient>().To<LooptWebClient>();…

15

“Moq” as object mock framework

[TestMethod]public void VerifyDeals(){

var testClient = new Mock<ILooptWebClient>();testClient.

Setup(c => c.GetUrl(It.IsAny<Uri>())).Returns(Resources.MyResponse);

var groupon = new GrouponAdapter(testClient);

…} 16

Manage packages via NuGet

17

Queries into log files via Splunk

18

Key benchmarks on TV screen via Gecko Board

19

Tool Resources

• Source Control – Mercurial via Kiln• http://www.fogcreek.com/kiln/

• SQL Tools - Redgate SQL Source Control / SQL Compare• http://www.red-gate.com/products/sql-development/

• Automated Build Environment – Jenkins• http://jenkins-ci.org

• Dependency Injection / Testable code• http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection

• Dependency Injection Framework – Ninject• http://ninject.org

• Mock Framework – Moq• http://code.google.com/p/moq

• Library extension for Visual Studio – Nuget• http://nuget.org

• Log file Index and Parser – Splunk• http://www.splunk.com

• Engineering dashboard – Gecko board• http://www.geckoboard.com

20

Recommended