BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems)" by Heine Frifeldt
-
Upload
mark-a -
Category
Technology
-
view
312 -
download
0
description
Transcript of BizSpark SF Lightning Talk: "Automated Testing (Unit, Integration and Systems)" by Heine Frifeldt
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