Qafoo GmbH - passion for software quality

Help you and your team benefit from new perspectives on cutting-edge quality engineering techniques and tools through the Qafoo team weblog.

PHP Hypertext Processor

  • Using Traits With PHPUnit

    by Kore Nordmann on Tue, 15 Nov 2016 09:43:56 +0100

    As we already wrote that "Code Reuse By Inheritance" has lots of problems and we consider it a code smell. You should always aim to use Dependency Injection, most likely Constructor Injection. But with test cases in PHPUnit we cannot do this because we have no control about how and when our test cases are created. There are a similar problem in other frameworks, like we discussed in "Object Lifecycle Control". We also blogged about traits as a Code Smell, but let me show and explain why they might be fine to use in your test cases.

    Read more on Using Traits With PHPUnit…
  • Database Fixture Setup in PHPUnit

    by Tobias Schlitt on Tue, 15 Nov 2016 09:43:56 +0100

    We already discussed when and how to reset a database between tests. But on top of that you often need some basic or more complex data to run the tests against. We discuss different variants and their respective trade-offs in this post…

    Read more on Database Fixture Setup in PHPUnit…
  • Database Tests With PHPUnit

    by Tobias Schlitt on Tue, 21 Mar 2017 14:02:14 +0100

    Most of us do not use PHPUnit solely for Unit Tests but we also write Integration or Acceptance Tests with PHPUnit. One very common question then is how to interact with the database correctly in those tests. Let me show you the different options and their trade offs…

    Read more on Database Tests With PHPUnit…
  • Introduction To Page Objects

    by Manuel Pichler on Tue, 06 Sep 2016 09:19:41 +0200

    A while ago we wrote about writing acceptance tests (end-to-end tests) with Mink and PHPUnit. While this is a great set of tools for various applications such tests tend be susceptible to changes in the frontend. And the way they break is often hard to debug, too. Today I will introduce you to Page Objects which can solve some of these problems.

    Read more on Introduction To Page Objects…
  • Scaling Constraints of Languages

    by Kore Nordmann on Tue, 02 Aug 2016 07:45:07 +0200

    Micro-Services or any set of small services are common again right now. While it can make a lot of sense to use a dedicated service for a well defined problem those services are sometimes used just to play with a different server software. While it is pretty obvious for most that selecting the right database is important the same is true for selecting the right language (virtual machine) for the job.There are different types of services or server applications where different types of virtual machines (executing the opcodes / bytecode of the compiled source code) make more or less sense. What are the criteria we should base such a decision on and which language should we choose when?

    Read more on Scaling Constraints of Languages…
  • Outside-In Testing and the Adapter and Facade Patterns

    by Benjamin Eberlei on Fri, 02 Sep 2016 07:59:09 +0200

    Outside-In Testing benefits a lot from the facade and adapter patterns, which will separate your code from third-party libraries and simplify the APIs of your system.

    Read more on Outside-In Testing and the Adapter and Facade Patterns…
  • How To Synchronize a Database With ElasticSearch?

    by Kore Nordmann on Sat, 10 Sep 2016 10:35:21 +0200

    Since search engines like Apache Solr and ElasticSearch are easy to use and setup more and more applications are using them to index their content and make it searchable by the user. After all the underlying Lucene index engine provides far more powerful features then a plain MySQL full text search or similar solutions. With Apache Solr and ElasticSearch you can enhance the performance and the functionality of your website. What we often stumble across, though, is the naiive approach of synchronizing both data storages which tends to fail in multiple ways. Let me show how you can fix this.

    Read more on How To Synchronize a Database With ElasticSearch?…
  • How To Refactor Without Breaking Things

    by Tobias Schlitt on Wed, 01 Jun 2016 12:46:18 +0200

    Refactoring means to change the structure of your code without changing its behavior. Refactoring is an essential part of everyday programming and should become knee-jerk for your whole development team. It is very helpful to cleanup feature spikes, revise earlier decisions and keep a maintainable code base in the long run. In a perfect project world - with extensive automated tests of various types - this is just a matter of getting used to. But there are only very few such projects, so getting into proper refactoring is much harder. This article will show you important tips to master this challenge with your team.

    Read more on How To Refactor Without Breaking Things…
  • When To Abstract

    by Kore Nordmann on Tue, 17 May 2016 12:30:54 +0200

    One of the most difficult challenges in a developers life is finding the "right" abstraction, or at least the best one given the current circumstances. The core problem is that abstraction is a bet on the future development of the software and we know that future is volatile. The circumstances will change, so will the view on the best abstraction change.

    Read more on When To Abstract…
  • Never Use null

    by Kore Nordmann on Tue, 03 May 2016 08:58:13 +0200

    When doing code reviews together with our customers we see a pattern regularly which I consider problematic in multiple regards – the usage of null as a valid property or return value. We can do better than this.

    Read more on Never Use null…
1 - 2 - 3 - 4 - 5 ... - 9