Appetite comes with testing
Upcoming SlideShare
Loading in...5
×
 

Appetite comes with testing

on

  • 647 views

 

Statistics

Views

Total Views
647
Views on SlideShare
579
Embed Views
68

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 68

http://www.netmeans.net 67
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Appetite comes with testing Appetite comes with testing Presentation Transcript

    • Appetite comes with testing “Its a dangerous business, Frodo, going out your door. You step onto the road, and if you dont keep your feet, theres no knowing where you might be swept off to.” J.R.R. Tolkien, The Lord of the RingsChange begins with awareness
    • Defect Cost IncreaseChange begins with awareness
    • Defect Cost IncreaseChange begins with awareness
    • Stress cycleChange begins with awareness
    • Testing as... documentationChange begins with awareness
    • Testing as... instrument for cooperationChange begins with awareness
    • Testing as... instrument for open source cooperationChange begins with awareness
    • Pair programmingChange begins with awareness
    • All begins with... ...a needChange begins with awareness
    • And... “Supporting multiple user classes is not easy at all. It would make the bundle code far more complex as we would basically need to change all places interacting with the user to be able to handle all user classes. I dont really want to go this way (it will also make it more likely to introduce bugs).” ...a delusionChange begins with awareness
    • But... In Symfony2, all core classes use the service container, so it is easy to extend, configure and use any object ...a hopeChange begins with awareness
    • Service Container Dependency Injection Container use AcmeHelloBundleMailer; $mailer = new Mailer(sendmail); $mailer->send(info@netmeans.net, ... );Change begins with awareness
    • Service Container Dependency Injection Container class Mailer { private $mailerType; public function __construct($mailerType) { $this->mailerType = $mailerType } public function send($to, ...) { ... } } services: my_mailer: class: AcmeHelloBundleMailer arguments: [sendmail]Change begins with awareness
    • Service Container Dependency Injection Container class HelloController extends Controller { public function sendEmailAction() { $mailer = $this->get(my_mailer); $mailer->send(info@netmeans.net, ... ); } }Change begins with awareness
    • FOSUserBundle fos_user: db_driver: orm firewall_name: main user_class: AcmeUserBundleEntityUserChange begins with awareness
    • FOSUserBundle fos_user: db_driver: orm firewall_name: main user_class: AcmeUserBundleEntityUser service: user_manager: custom_user_managerChange begins with awareness
    • So ... We have to create our custom UserManager that accepts in the constructor an object that have the responsibility to discriminate user types...a solutionChange begins with awareness
    • First of all: test We start writing some functional tests to check correct integration of FOSUserBundleChange begins with awareness
    • Now we feel good We can extends FOSUser without pain improving changes step by stepChange begins with awareness
    • Custom UserManager Class UserManager extends FOSUserBundleEntityUserManager { protected $userDiscriminator; public function __construct(..., UserDiscriminator $userDiscriminator) public function getClass() { return $this->userDiscriminator->getClass(); } }Change begins with awareness
    • UserDiscriminator public function getClass() { return Acme/UserBundle/Entity/UserOne; }Change begins with awareness
    • From here its all smooth With little iterations, we improve UserManager and UserDiscriminator with unit and functional tests, passing from a dirty code to a more elegant oneChange begins with awareness
    • NmnMultiUserBundle fos_user: db_driver: orm firewall_name: main user_class: AcmeUserBundleEntityUser service: user_manager: nmn_user_manager registration: form: handler: nmn_user_registration_form_handler profile: form: handler: nmn_user_profile_form_handlerChange begins with awareness
    • NmnMultiUserBundle parameters: nmn_user_discriminator_parameters: classes: user_one: entity: AcmeUserBundleEntityUserOne registration: AcmeUserBundleFormTypeRegistrationUserOneFormType profile: AcmeUserBundleFormTypeProfileUserOneFormType factory: user_two: entity: AcmeUserBundleEntityUserTwo registration: AcmeUserBundleFormTypeRegistrationUserTwoFormType profile: AcmeUserBundleFormTypeProfileUserTwoFormType factory:Change begins with awareness
    • NmnMultiUserBundle Ok, it is an hack :) A lazy way to use for free most of the functionality of FOSUserBundle ... ... but it is ready to be improved by anyone.Change begins with awareness
    • NmnMultiUserBundle github.com/netmeansnet/NmnMultiUserBundle github.com/netmeansnet/NmnMultiUserBundleSandbox travis-ci.org/#!/netmeansnet/NmnMultiUserBundle @leonardo_nmn @euxpomChange begins with awareness
    • Some Books The Clean Coder A code of Conduct for Professional Programmers Martin, Robert C.I know this sounds strident and unilateral, but given the record I dontthink the surgeons should have to defend hand-washing, and I dontthink programmers should have to defend TDDChange begins with awareness
    • Some Books Extreme Programming Explained Embrace Change Beck, KentIn software development, “perfect” is a verb, not an adjectiveIn XP, testing is as important as programmingChange begins with awareness
    • Some Books The Grumpy Programmers Guide To Building Testable Applications in PHP Hartjes, ChrisBuilding testable applications is HardThe reason for investing in automated testing is obvious: any bugs youcatch before your application makes it into production cost less in termsof resources (money, developer time) to fix than fixing it into productionChange begins with awareness