Lesson 9 - Unit Tests of Commercial Applications I
In the previous lesson, Fake, Codeception Stub and AspectMock, we finished mocking in PHPUnit, in
Codeception, and AspectMock. In order to make the best possible preparation for
practice, in the following two lessons, we're going to see interesting
situations and approaches in unit tests that I chose from real-world commercial
applications, especially from extensive tests of the ICT.social internal system.
You're going to understand how to test more difficult scenarios, learn how to
mock native PHP functions, mock the superglobal
$_FILES arrays, test random data
generators, compare images with tolerance, and other interesting testing
Date and time mocking
Let's consider a class that allows us to register cron tasks (scheduled tasks). In web applications, it's often necessary to perform different actions at time intervals. Perhaps the easiest example is sending newsletter emails, which should be sent in multiple batches, for example, only a few hundred emails per hour, otherwise your server will be considered as spam by e-mail providers. Other similar actions include various event reminders, posting to social networks, synchronizing currency rates, processing logs, and so on.
Once you have dozens of crons set up in your app, it's very difficult to
maintain them through the server administration. That's why we created a
TaskRunner class, bound to a single cron event, that is executed
every 5 minutes.
TaskRunner then triggers other events as they are
registered in it.
But how to test the class when it's internally using the native PHP
time() function? To avoid having to wait for an hour in the test
for example, we'll create our own
...End of the preview...
ict.social is a large database made up of manuals and tutorials, whose main goal is to provide high-quality IT education to everyone. We started out in the Czech republic, where we display roughly a million articles per month and receive plenty of gratitude from our users. Thanks to our successful establishment, we are now bringing these articles to the rest of the world.
Although we are trying to keep our content free of charge, maintaining the site is a huge effort for everyone involved. Therefore, some content (exercises and more advanced material) costs network points. Don't worry, they're really cheap :)
Requested article covers this content:
In this tutorial, we'll test the date and time in PHP using PHPUnit to simulate its changes and test how libraries response to them.
Buying this article gives you unlimited access to it forever. You will learn some more and help us keep giving our site maintenance which helps you and others get better futures. It's a win-win.
You gain points by supporting our network. This is done by sending a helpful amount of money to support the site, or by creating content for the network.
You can get points immediately using:
|Credit card||SMS||Wire transfer|