Your SlideShare is downloading. ×
0
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Coding Naked
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Coding Naked

2,627

Published on

Coding Naked – Practical steps to moving towards & embracing TDD. We'll overview the normal roadblocks that people typically run in to, and practical ways to overcome those road blocks on your way to …

Coding Naked – Practical steps to moving towards & embracing TDD. We'll overview the normal roadblocks that people typically run in to, and practical ways to overcome those road blocks on your way to embracing Test Driven Development - make coding without tests as uncomfortable as coding naked!

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,627
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Build out slide.. Before you click through: take a minute to have student “read” test and talk out what it’s doing.
  • Build out slide.. Before you click through: take a minute to have student “read” test and talk out what it’s doing.
  • Build out slide.. Before you click through: take a minute to have student “read” test and talk out what it’s doing.
  • Build out slide.. Before you click through: take a minute to have student “read” test and talk out what it’s doing.
  • Exercise: Find the area of when covered by various shapes…
  • Transcript

    • 1. Caleb JenkinsdevelopingUX.comProactionMentors.com @calebjenkins
    • 2. I’ll be leaving my clothes onCODING Naked!
    • 3. Development Engineering Process Object Orientation Automated Tests Agile, Lean, XP SOLID Source Control Team Dynamics Patterns Automated Builds Continuous Learning Secure Coding
    • 4. Is TDDonly for coding elites?
    • 5. or something forevery developer?
    • 6. How do we make Automated Tests the norm?
    • 7. make coding without tests asuncomfortable as coding naked
    • 8. and as fun as playing with Legos
    • 9. * this is not me
    • 10. Development…and you build the Legos!
    • 11. Building Better Legos
    • 12. Do you write after the fact Testsor design with executablespecifications?A test confirms what was doneblue prints or specificationsdefine what needs to be done.Automated Unit Tests do both!
    • 13. What was Whatshould be Discuss: done done Building Inspector vs Architect Designer Which are you? Which do you need? What’s the difference? Unit Tests do both
    • 14. what are the 4 big parts of unit tests?16
    • 15. Code Tests Test Framework Test Runner17
    • 16. your application Code what you want to test Tests Test Framework Test Runner18
    • 17. your test code the code that tests the Code Tests code that you wrote or are going to write Test Framework Test Runner19
    • 18. Code Tests attributes and asserts the framework provides the attributes and asserts Test Framework so we know what the tests Test Runner are doing. Examples: nUnit jUnit cppUnit20
    • 19. Code Tests runs the tests often associated with the test framework; is Test Framework Test Runner distinctly separate. sometime integrated in IDE, CI Server or stand alone exe21
    • 20. Code Tests Test Framework Test Runner22
    • 21. Test Runner Tests Test Framework Tests Code Tests Tests Tests24
    • 22. 1 Have a runner
    • 23. Pick a Test1 Framework
    • 24. Test Framework27
    • 25. Pick a Test2 Runner
    • 26. Test Runners nUnit Test Runner29
    • 27. Test Runners nUnit Test Runner Visual Studio (VS Test)30
    • 28. Test Runners nUnit Test Runner Visual Studio (VS Test) CodeRush / ReSharper31
    • 29. Test Runners nUnit Test Runner Visual Studio (VS Test) CodeRush / ReSharper32 Continuous Integration (Team City)
    • 30. Write Test3 Code
    • 31. Test Code … 3 A’s Arrange Act AssertArrange– Set up the scenario and the initial input values.Often in a common [TestFixtureSetup] or [Setup] methodAct - Action that creates the outcome that is being tests, usuallycalling some method in your code to test the result.Assert – Is a boolean statement to your testing framework todeclare the expected outcome. Results in Pass or Fail 34
    • 32. Building better Lego’s UI UI Logic Tests are smallApp Domain Domain Validation Tests are fast Integration Service Proxy Tests focus on one thing Data Logic Data Access
    • 33. Simple Tests (return values) with no dependencies… Test Runner Test Code UI Logic App Domain Domain Validation Unit Tests focus on a Unit Test a unit in isolation from other units Control input => Testable output
    • 34. DemoLet’s writesome tests!
    • 35. 2 Set the Scenecontext makes all the difference!
    • 36. DiscussionDefining Behavior as a <role>, I will <function> so that <value>
    • 37. Discussionwhat if our “tests” given <class> to testwhen <setup> scenarioshould <test> outcome matched our language?
    • 38. Discussion BDD
    • 39. Resources & Frameworks BDD more than TDD done right http://neelnarayan.blogspot.com/2010/07/bdd-is-more-than-tdd-done-right.htmlbehavior driven, test driven, domain driven http://lucisferre.net/2011/02/05/behavior-driven-test-driven-domain-driven-design/ nBehave, nSpec, SpecFlow, StoryQ, mSpec, StorEvil introducing BDD http://dannorth.net/introducing-bdd/
    • 40. 3 Handle your dependencies
    • 41. Dependencies“The single greatest thing that you can doto make your code more testable andhealthy is to start taking a DependencyInjection approach to writing software” Real World .NET, C# and Silverlight Caleb Jenkins (Wrox Press 2012)
    • 42. How do you test this UI UI LogicApp Domain Domain Validation Integration Service Proxy Data Logic with these Data Access dependencies
    • 43. UI UI LogicApp Domain Domain Validation Integration Service Proxy Data Logic Data Access
    • 44. Test Runner Test Code UI LogicApp Domain Domain Validation Integration Service Proxy Dependency Injection + Interfaces Faked dependencies to increase unit isolation Leverage mocking frameworks makes life better
    • 45. Note:Dependency Injection will turn you in to a complete coding Ninja, however the full scope of DI with any of the many DI frameworks is beyond the scope of this talk
    • 46. http://developingUX.com/DI/
    • 47. Mocking Framework“A mocking framework allows you to create fake classes onthe fly in-line with your test code. That is a bit of asimplification, mocking frameworks use a combination ofemits, reflection and generics to create run-time instanceimplementations of .NET Interfaces – whew, that’s a mouthful- it’s a whole lot easier to say that they create fake classes onthe fly!” Real World .NET, C# and Silverlight Caleb Jenkins (Wrox Press 2012)
    • 48. Mocking in .NET
    • 49. Bringing DI together
    • 50. IData mockData = MockRepository.GenerateMock<IData>();mockData.Expect(x => x.getAll<account>()) .Return(sampleAccounts).Repeat.Once();IAccountServices accountService = new AcmeAccountService(mockData);var act = accountService.GetAccount(known_account_id);mockData.VerifyAllExpectations();
    • 51. IData mockData = MockRepository.GenerateMock<IData>();mockData.Expect(x => x.getAll<account>()) .Return(sampleAccounts).Repeat.Once();IAccountServices accountService = new AcmeAccountService(mockData);var act = accountService.GetAccount(known_account_id);mockData.VerifyAllExpectations();
    • 52. IData mockData = MockRepository.GenerateMock<IData>();mockData.Expect(x => x.getAll<account>()) .Return(sampleAccounts).Repeat.Once();IAccountServices accountService = new AcmeAccountService(mockData);var act = accountService.GetAccount(known_account_id);mockData.VerifyAllExpectations();
    • 53. DemoMocking Confidential
    • 54. the problem with edges
    • 55. UI Business Data
    • 56. Edges are Hard to TestUI Business Data
    • 57. Testing edgescan be liketesting to see ifyou’re good atcliff jumping Confidential
    • 58. That’s not me Confidential
    • 59. You’re either anexpert and it works… ..or you’re stuff on a rock. Confidential
    • 60. Edges are Hard to TestUI UI Data Business Data Logic Logic
    • 61. Edges are still Edges are Hard to Test Data UI DataUI Business Logic Logic by separating UI/Data edges fromUI/Data logic we’re increasing the testable area
    • 62. Edges are still Edges are Hard to Test Data UI DataUI Business Logic Logic we’ve also made it easier to implement by separating UI/Data edges from various UI and Data platformsUI/Data logic we’re increasing the testable area without affecting the application logic
    • 63. MVC MVPM-V-VM 72
    • 64. MVC MVPM-V-VM 73
    • 65. Model View Controller (MVC)• All input is routed to a controller• Example Web Scenarios• ASP.NET MVC Framework Model View Presenter (MVP)• View initiates Presenter• UI Logic is contained in Presenter• Example WinApp & ASP.NET Webform apps Model View ViewModel (MVVM)• ViewModel is a view specific model• VM is can mash up application models• UI logic contained in ViewModel• Example Rich Data binding Scenarios (WPF / Silverlight) 74
    • 66. Application UI Layer Business LayerData Layer (IRepository) Data Logic IRepository Repository handles the CRUD and “bare metal” Data Interactions. Consider ADO.NET, nHibernate, EF, LinqToSQL Data Base 76
    • 67. 1 Have a runner
    • 68. 1 Have a runner2 Set the Scene
    • 69. 1 Have a runner2 Set the Scene3 Handle your Dependencies
    • 70. Development Team Work ProcessObject Orientation Automated Tests Agile, Lean, XP SOLID Source Control Team Dynamics Patterns Automated Builds Continuous Learning Secure Coding
    • 71. http://www.flickr.com/photos/lowfatbrains/80542761/http://www.flickr.com/photos/jforth/5768064504/http://www.flickr.com/photos/laughingsquid/255915238/http://www.flickr.com/photos/dieselbug2007/370557683/
    • 72. http://www.flickr.com/photos/georgivar/4974112941/http://www.flickr.com/photos/redbettyblack/395899686/sizes/http://www.flickr.com/photos/goldberg/815408116/http://www.flickr.com/photos/fudj/122371431/
    • 73. http://www.flickr.com/photos/utslibrary/6776175796/http://www.flickr.com/photos/yardsale/4524101944/http://www.flickr.com/photos/38738277@N04/3652658961/http://www.flickr.com/photos/m0php/530526644/
    • 74. @calebjenkins http://developingux.com @proactionmentor caleb@calebjenkins.com

    ×