Laravel Testing Decoded the Testing Book You’Ve Been Waiting For

Total Page:16

File Type:pdf, Size:1020Kb

Laravel Testing Decoded the Testing Book You’Ve Been Waiting For Laravel Testing Decoded The testing book you’ve been waiting for. JeffreyWay This book is for sale at http://leanpub.com/laravel-testing-decoded This version was published on 2013-05-28 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do. ©2013 JeffreyWay Tweet This Book! Please help JeffreyWay by spreading the word about this book on Twitter! The suggested tweet for this book is: Just bought @jeffrey_way’s new book, Laravel Testing Decoded! The suggested hashtag for this book is #laravelTesting. Find out what other people are saying about the book by clicking on this link to search for this hashtag on Twitter: https://twitter.com/search/#laravelTesting Contents Welcome .............................................. 1 It Has Begun ........................................... 1 Is This Book For Me? ...................................... 2 Why Laravel-Specific? ..................................... 2 Exercises ............................................. 3 Errata .............................................. 3 How to Consume This Book .................................. 3 Get in Touch ........................................... 3 Into the Great Wide Open .................................... 5 Chapter 1: Test All The Things .................................. 6 You Already Test ........................................ 6 6 Wins From TDD ........................................ 7 1. Security ......................................... 7 2. Contribution ....................................... 7 3. Big-Boy Pants ...................................... 8 4. Testability Improves Architecture ........................... 9 5. Documentation ..................................... 9 6. It’s Fun .......................................... 9 What Should I Test? ....................................... 10 6 Signs of Untestable Code ................................... 10 1. New Operators ..................................... 11 2. Control-Freak Constructors ............................... 12 3. And, And, And ..................................... 13 4 Ways to Spot a Class With Too Many Responsibilities . 13 4. Too Many Paths? Polymorphism to the Rescue! .................... 14 5. Too Many Dependencies ................................ 17 6. Too Many Bugs ..................................... 17 Test Jargon ............................................ 18 Unit Testing ........................................ 18 Model Testing ....................................... 18 Integration Testing ..................................... 19 Functional (Controller) Testing .............................. 19 CONTENTS Acceptance Testing .................................... 19 Relax ............................................... 21 Chapter 2: Introducing PHPUnit ................................. 22 Installation ............................................ 22 Making Packages Available Globally ........................... 24 Assertions 101 .......................................... 25 Decoding A Test Class Structure ............................. 27 assertTrue ......................................... 27 assertEquals ........................................ 28 assertSame ......................................... 29 assertContains ....................................... 30 assertArrayHasKey .................................... 31 assertInternalType ..................................... 31 assertInstanceOf ...................................... 32 Asserting Exceptions .................................... 33 Summary ............................................ 33 Chapter 3: Configuring PHPUnit ................................ 35 Options ............................................. 35 Technicolor ......................................... 35 Bootstrapping ....................................... 37 Output Formats ...................................... 38 XML Configuration File .................................... 38 Continuous Testing ....................................... 40 Watching Files ....................................... 43 Triggering Multiple Files .................................. 44 Some Vim-Specific Advice ................................ 45 Summary ............................................ 46 Chapter 4: Making PHPUnit Less Verbose ........................... 47 Importing Assertions as Functions ............................... 47 Applying the Laravel Style to PHPUnit ............................ 48 Chapter 5: Unit Testing 101 .................................... 50 My Struggles .......................................... 50 Unit Testing ........................................... 51 Arrange, Act, Assert ...................................... 51 Testing in Isolation ....................................... 52 Tests Should Not Be Order-Dependent ............................. 53 Test-Driven Development .................................... 53 Behavior-Driven Development ................................. 53 Testing Functions ........................................ 54 Slime vs. Generalize .................................... 58 CONTENTS Slime ........................................ 58 Generalize ..................................... 58 Making the Test Pass .................................... 59 Testing Classes ......................................... 63 Refactoring the Tests .................................... 69 Refactoring the Production Code ............................. 71 Polymorphism ....................................... 72 Extensibility .................................... 75 Mocks ........................................ 75 Project Complete ........................................ 77 Final Source ........................................ 77 Summary ............................................ 81 Chapter 6: Testing Models .................................... 82 What to Test ........................................... 82 Accessors and Mutators ..................................... 82 Cat Years Example ..................................... 83 Password Hashing Example ................................ 83 Custom Methods ........................................ 84 Validations ............................................ 85 Helpers ........................................... 91 Factories ............................................. 93 Laravel Test Helpers ....................................... 95 Factories .......................................... 95 Overrides .......................................... 96 Models ........................................... 96 Test Helpers ........................................ 97 assertValid and assertNotValid .............................. 97 Asserting Relationships .............................. 97 Summary ............................................ 98 Chapter 7: Easier Testing With Mockery ............................ 99 Mocking Decoded ........................................ 99 Installation ............................................101 The Dilemma ..........................................102 Dependency Injection ...................................103 The Solution ...........................................106 Simple Mock Objects ...................................108 Return Values From Mocked Methods . 109 Expectations ...........................................111 Partial Mocks ..........................................112 Hamcrest ............................................114 Summary ............................................116 CONTENTS Chapter 8: Test Databases .................................... 117 Test Databases ..........................................117 Specifying the Environment ..................................118 Calling Artisan From Tests ...................................119 Try It Out ............................................120 Databases in Memory ......................................121 Summary ............................................122 Chapter 9: Just Swap That Thang ................................ 123 Mockery .............................................123 Testing ..............................................124 Mocking Events ......................................127 Summary ............................................128 Chapter 10: Testing Controllers ................................. 129 What Does a Controller Do? ..................................129 3 Steps to Testing Controllers ..................................130 The Hello World of Controller Testing .............................130 Overloading is Your Friend ................................131 Calling Controller Actions .................................132 Laravel’s Helper Assertions ...................................132 Mocking the Database .....................................135 Required Refactoring ...................................135 The IoC Container .....................................139 Redirections ...........................................139 Paths ...............................................140 Repositories ...........................................143 Structure .............................................147 Updating the Tests .....................................150 Crawling the DOM .......................................153 Ensure View Contains Text ................................154 Basic Traversing ......................................154 Fetch
Recommended publications
  • Pragmatic Version Control Using Subversion
    What readers are saying about Pragmatic Version Control using Subversion I expected a lot, but you surprised me with even more. Hav- ing used CVS for years I hesitated to try Subversion until now, although I knew it would solve many of the shortcom- ings of CVS. After reading your book, my excuses to stay with CVS disappeared. Oh, and coming from the Pragmatic Bookshelf this book is fun to read too. Thanks Mike. Steffen Gemkow Managing Director, ObjectFab GmbH I’m a long-time user of CVS and I’ve been skeptical of Sub- version, wondering if it would ever be “ready for prime time.” Until now. Thanks to Mike Mason for writing a clear, con- cise, gentle introduction to this new tool. After reading this book, I’m actually excited about the possibilities for version control that Subversion brings to the table. David Rupp Senior Software Engineer, Great-West Life & Annuity This was exactly the Subversion book I was waiting for. As a long-time Perforce and CVS user and administrator, and in my role as an agile tools coach, I wanted a compact book that told me just what I needed to know. This is it. Within a couple of hours I was up and running against remote Subversion servers, and setting up my own local servers too. Mike uses a lot of command-line examples to guide the reader, and as a Windows user I was worried at first. My fears were unfounded though—Mike’s examples were so clear that I think I’ll stick to using the command line from now on! I thoroughly recommend this book to anyone getting started using or administering Subversion.
    [Show full text]
  • Marketing Cloud Published: August 12, 2021
    Marketing Cloud Published: August 12, 2021 The following are notices required by licensors related to distributed components (mobile applications, desktop applications, or other offline components) applicable to the services branded as ExactTarget or Salesforce Marketing Cloud, but excluding those services currently branded as “Radian6,” “Buddy Media,” “Social.com,” “Social Studio,”“iGoDigital,” “Predictive Intelligence,” “Predictive Email,” “Predictive Web,” “Web & Mobile Analytics,” “Web Personalization,” or successor branding, (the “ET Services”), which are provided by salesforce.com, inc. or its affiliate ExactTarget, Inc. (“salesforce.com”): @formatjs/intl-pluralrules Copyright (c) 2019 FormatJS Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    [Show full text]
  • Hamcrest.Pdf
    Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com ¿Qué ofrece Autentia Real Business Solutions S.L? Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida 2. Auditoría de código y recomendaciones de mejora 3. Arranque de proyectos basados en nuevas tecnologías 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3a RFP Concurso Verificación Gran Empresa previa Consultora 1 Producción Tecnología Consultora 2 Certificación Desarrollo o Pruebas Consultora 3 Sistemas 3b Piloto Equipo propio desarrollo autentia 4. Cursos de formación (impartidos por desarrolladores en activo) JPA-Hibernate, MyBatis Spring MVC, JSF-PrimeFaces /RichFaces, Control de autenticación y Motor de búsqueda empresarial (Solr) HTML5, CSS3, JavaScript-jQuery acceso (Spring Security) UDDI ETL (Talend) Web Services Rest Services Dirección de Proyectos Informáticos. Gestor portales (Liferay) Social SSO Metodologías ágiles Gestor de contenidos (Alfresco) SSO (Cas) Patrones de diseño Aplicaciones híbridas TDD Tareas programadas (Quartz) BPM (jBPM o Bonita) Gestor documental (Alfresco) Generación de informes (JasperReport) Inversión de control (Spring) ESB (Open ESB) Compartimos nuestro conociemiento en: Para más información visítenos en: www.adictosaltrabajo.com www.autentia.com E-mail: Contraseña: Deseo registrarme Entrar He olvidado mis datos de acceso Inicio Quiénes somos Tutoriales Formación Comparador de salarios Nuestro libro Charlas Más Estás en: Inicio Tutoriales Como hacer nuestros test más legibles con Hamcrest DESARROLLADO POR: Catálogo de servicios Francisco J.
    [Show full text]
  • A Framework for PHP Program Analysis
    A Framework for PHP Program Analysis Mark Hills Postdoc in Software Analysis and Transformation (SWAT) CWI Scientific Meeting February 8, 2013 http://www.rascal-mpl.org Overview • Motivation • Goals • Current Progress • Related Work 2 3 PHP: Not Always Loved and Respected • Created in 1994 as a set of tools to maintain personal home pages • Major language evolution since: now an OO language with a number of useful libraries, focused on building web pages • Growing pains: some “ease of use” features recognized as bad and deprecated, others questionable but still around • Attracts articles with names like “PHP: a fractal of bad design” and “PHP Sucks, But It Doesn’t Matter” 4 So Why Focus on PHP? • Popular with programmers: #6 on TIOBE Programming Community Index, behind C, Java, Objective-C, C++, and C#, and 6th most popular language on GitHub • Used by 78.8% of all websites whose server-side language can be determined, used in sites such as Facebook, Hyves, Wikipedia • Big projects (MediaWiki 1.19.1 > 846k lines of PHP), wide range of programming skills: big opportunities for program analysis to make a positive impact 5 Rascal: A Meta-Programming One-Stop-Shop • Context: wide variety of programming languages (including dialects) and meta-programming tasks • Typical solution: many different tools, lots of glue code • Instead, we want this all in one language, i.e., the “one-stop-shop” • Rascal: domain specific language for program analysis, program transformation, DSL creation PHP Program Analysis Goals • Build a Rascal framework for creating
    [Show full text]
  • Silk Test 20.5
    Silk Test 20.5 Silk4J User Guide Micro Focus The Lawn 22-30 Old Bath Road Newbury, Berkshire RG14 1QN UK http://www.microfocus.com © Copyright 1992-2019 Micro Focus or one of its affiliates. MICRO FOCUS, the Micro Focus logo and Silk Test are trademarks or registered trademarks of Micro Focus or one of its affiliates. All other marks are the property of their respective owners. 2019-10-23 ii Contents Welcome to Silk4J 20.5 ....................................................................................10 Licensing Information ......................................................................................11 Silk4J ................................................................................................................ 12 Do I Need Administrator Privileges to Run Silk4J? ........................................................... 12 Best Practices for Using Silk4J ........................................................................................ 12 Automation Under Special Conditions (Missing Peripherals) ............................................13 Silk Test Product Suite ...................................................................................................... 14 What's New in Silk4J ........................................................................................16 Save Time and Costs with Service Virtualization for Mobile Devices ............................... 16 Enhance Security with Java-based Encryption ................................................................. 16 Usability Enhancements
    [Show full text]
  • Citrus Framework Offers a Wide Range of Test Actions to Take Control of the Process Flow During a Test (E.G
    Citrus Authors: The Citrus Community Version 3.0.0, 2021-07-23 citrus 1. Preface . 2 2. Introduction. 3 2.1. Overview. 3 2.2. Usage scenarios . 3 3. Setup . 5 3.1. Using Maven. 5 3.2. Using Gradle. 8 4. Runtimes . 10 4.1. TestNG . 10 4.2. JUnit5 . 14 4.3. JUnit4 . 17 4.4. Cucumber . 19 4.5. Main CLI runtime . 30 5. Running tests in Java. 32 5.1. Test action runner . 32 5.2. Gherkin test action runner. 33 5.3. Test meta information. 33 5.4. Finally block. 34 5.5. Test behaviors . 36 5.6. Run custom code. 38 5.7. Resource injection . 39 6. Test variables . 44 6.1. Global variables . 44 6.2. Extract variables. 46 6.3. Path expressions . 48 6.4. Escape variables . 51 7. Message validation. 52 7.1. Validation registry . 52 7.2. Validation modules. 53 7.3. Json validation. 54 7.4. XML validation . 68 7.5. Schema validation . 98 7.6. Plain text validation. 103 7.7. Binary validation . 109 7.8. Hamcrest validation . 112 7.9. Custom validation . 113 8. Test actions . 117 8.1. Send . 117 8.2. Receive . 125 8.3. SQL. 137 8.4. Sleep . 146 8.5. Java . 146 8.6. Receive timeout. 148 8.7. Echo . 150 8.8. Stop time. 150 8.9. Create variables . 152 8.10. Trace variables . 154 8.11. Transform . ..
    [Show full text]
  • Everything You Need to Know About Openjdk's Move to Git and Github
    Menu Topics Archives Downloads Subscribe Everything you need to know JAVA 17 about OpenJDK’s move to Git and GitHub Everything you need to know Blame or thank BitKeeper about OpenJDK’s move to Git Why not Mercurial? and GitHub Why Git? Why GitHub? Why the move, and why now? The move from Mercurial to Git Getting the source code and provided an opportunity to consolidate building the OpenJDK the source code repositories. Conclusion by Ian Darwin Dig deeper May 14, 2021 Download a PDF of this article Have you ever built your own Java Development Kit from source? Most end users of the JDK will not need to build their own JDK from the Oracle source code. I’ve needed to do that only a few times when I was running on the OpenBSD UNIX-like system, which is not one of the three supported platforms. Sure, you might want to build your own JDK to try out a new feature that you think should be added to Java. You might choose to build from source to be sure you are running a more trustworthy binary. Having the complete source code readily available, and now in a more commonly used download format, means it is easier than ever to build your own JDK. Yes, it’s a better-documented, easily configured process than in the past. But it’s still a bit confusing. The source code for the OpenJDK recently moved from the Mercurial version control system (VCS) to the Git VCS and the GitHub repository system, and that’s probably a good thing.
    [Show full text]
  • Comparison Method Violates Its General Contract Javascript
    Comparison Method Violates Its General Contract Javascript Micah remains perithecial after Carleigh gripes salably or phenolate any phonographer. Sickliest Bertram volatilised sostenuto. Defensive Claire dismounts innumerably while Lion always attenuates his shimmers motivated sleazily, he overselling so contradictively. IllegalArgumentException Comparison method violates its the contract at. Java error Comparison method violates its enterprise contract. Selected for the chrome browser view cart for dupont cross over paint code requires an paint cross reference only cast will have description. Latest AsposePDF Product Family topics Free Support. Can report this comparison method violates its general contract javascript enabled for cool and tsai liming for fields. Topics related to, follow the contract comparison method violates its general contract and then merges the place as well? Signal Start to late if started cases should be attached to weight Case. Brands and bump me however not gm color collections. For fields that sample of column data types, or as underneath any of paint! Scala than in Java. Comparison method violates its trash contract CMSDK. Previously, since the Channels would they exist. You can affect another year from what list data in music same configuration page. Check in many cases we cannot return not least mopar stuff for specific experience requirements for you. Be violating its general contract comparison method violates its bends anymore to generate random integers being, it depends on the violation of edges that! In stop, it makes working provided a special analysis graph class obsolete. This violates its general contract in the violation of. This method violating the general contract in handlers for generic algorithms and related to generate this web services, can provide additional cost a javascript.
    [Show full text]
  • Code Review Guide
    CODE REVIEW GUIDE 2.0 RELEASE Project leaders: Larry Conklin and Gary Robinson Creative Commons (CC) Attribution Free Version at: https://www.owasp.org 1 F I 1 Forward - Eoin Keary Introduction How to use the Code Review Guide 7 8 10 2 Secure Code Review 11 Framework Specific Configuration: Jetty 16 2.1 Why does code have vulnerabilities? 12 Framework Specific Configuration: JBoss AS 17 2.2 What is secure code review? 13 Framework Specific Configuration: Oracle WebLogic 18 2.3 What is the difference between code review and secure code review? 13 Programmatic Configuration: JEE 18 2.4 Determining the scale of a secure source code review? 14 Microsoft IIS 20 2.5 We can’t hack ourselves secure 15 Framework Specific Configuration: Microsoft IIS 40 2.6 Coupling source code review and penetration testing 19 Programmatic Configuration: Microsoft IIS 43 2.7 Implicit advantages of code review to development practices 20 2.8 Technical aspects of secure code review 21 2.9 Code reviews and regulatory compliance 22 5 A1 3 Injection 51 Injection 52 Blind SQL Injection 53 Methodology 25 Parameterized SQL Queries 53 3.1 Factors to Consider when Developing a Code Review Process 25 Safe String Concatenation? 53 3.2 Integrating Code Reviews in the S-SDLC 26 Using Flexible Parameterized Statements 54 3.3 When to Code Review 27 PHP SQL Injection 55 3.4 Security Code Review for Agile and Waterfall Development 28 JAVA SQL Injection 56 3.5 A Risk Based Approach to Code Review 29 .NET Sql Injection 56 3.6 Code Review Preparation 31 Parameter collections 57 3.7 Code Review Discovery and Gathering the Information 32 3.8 Static Code Analysis 35 3.9 Application Threat Modeling 39 4.3.2.
    [Show full text]
  • Open Source Licenses Applicable to Hitachi's Products Earlier Versions
    Open Source Licenses Applicable to Hitachi’s Products EARLIER VERSIONS Several products are listed below together with certain open source licenses applicable to the particular product. The open source software licenses are included at the end of this document. If the open source package has been modified, an asterisk (*) appears next to the name of the package. Note that the source code for packages licensed under the GNU General Public License or similar type of license that requires the licensor to make the source code publicly available (“GPL Software”) may be available for download as indicated below. If the source code for GPL Software is not included in the software or available for download, please send requests for source code for GPL Software to the contact person listed for the applicable product. The materials below are provided “AS IS,” without warranty of any kind, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement. Access to this material grants you no right or license, express or implied, statutorily or otherwise, under any patent, trade secret, copyright, or any other intellectual property right of Hitachi Vantara Corporation (“Hitachi”). Hitachi reserves the right to change any material in this document, and any information and products on which this material is based, at any time, without notice. Hitachi shall have no responsibility or liability to any person or entity with respect to any damages, losses, or costs arising from the materials
    [Show full text]
  • Muhammad Touqeer Shafi
    Muhammad Touqeer Shafi E-mail: [email protected] CONTACT Website: http://pk.linkedin.com/pub/touqeer- shafi/22/634/b44/ Phone: +923142032499 WORK EXPERIENCE Ovrlod Pvt Ltd January 2014 — Present Software Engineer Design, program, and deliver web/local development projects (PHP, .Javascript and related platforms) within designated schedules. • Support development of projects from inception through alpha/beta testing and final delivery • Identify, communicate, and overcome development problems and creative challenges related to complex web • Keep current with programming languages/platforms within the web development/web application, and • Comprehend and follow specific project life-cycle instructions and procedures when required • Revise and troubleshoot development work as required • Provide tactical application mentorship to other developers in area of expertise • Heavily contribute to and actively follow technical documentation related to interactive development cycles • Act as a go-to person within technical area of expertise • Effectively present technical information in one-on-one and small group situations to vendors, clients, and agency staff • Apply common-sense understanding to carry out detailed but objective written or oral instructions • Engage in a pattern of learning and research Mamdani Web October 2011 — December 2013 Php Developer Write “clean”, well designed code. Produce detailed specifications. Troubleshoot, test and maintain the core product software and databases to ensure strong optimization and functionality.
    [Show full text]
  • A Guide to Native Plants for the Santa Fe Landscape
    A Guide to Native Plants for the Santa Fe Landscape Penstemon palmeri Photo by Tracy Neal Santa Fe Native Plant Project Santa Fe Master Gardener Association Santa Fe, New Mexico March 15, 2018 www.sfmga.org Contents Introduction………………………………………………………………………………………………………………………………………………………………………………………………………….. ii Chapter 1 – Annuals and Biennials ........................................................................................................................................................................ 1 Chapter 2 – Cacti and Succulents ........................................................................................................................................................................... 3 Chapter 3 – Grasses ............................................................................................................................................................................................... 6 Chapter 4 – Ground Covers .................................................................................................................................................................................... 9 Chapter 5 – Perennials......................................................................................................................................................................................... 11 Chapter 6 – Shrubs .............................................................................................................................................................................................
    [Show full text]