No Fixtures

Published on

Mar 20, 2023

Created with Sketch.

When developing a web application, creating tests is an essential step to ensure that the application works properly. Unit tests can be used to test individual parts of the application, while integration tests verify that all parts of the application work together smoothly. A common approach to writing integration tests is to use fixtures, which are pre-defined data used to initialize the test database.

However, using fixtures can have some drawbacks, including:

👉 Fixtures can be difficult to maintain, especially if the data models change frequently.
👉 Fixtures can make tests difficult to understand, because the data is encoded in the tests rather than in an external data source.
👉 Fixtures can make tests dependent on specific data, which can make tests fragile and difficult to run on different databases.

Fortunately, there are alternatives to fixtures that can be used to write integration tests for a web application.

One alternative is to generate test data on the fly. Instead of using fixtures, you can generate test data on the fly using data generation libraries like Faker or Pydantic. These libraries can generate data randomly for different types of fields (names, addresses, emails, etc.). This allows you to create tests independent of the specific data, while reducing the time and effort required to create fixtures.

Then simply use your existing code to build each step of your scenario.

In conclusion, using fixtures for integration testing of a web application can lead to maintenance, comprehension and fragility issues. The alternative approach such as on-the-fly test data generation can help to write robust, data-independent integration tests that are easy to understand and maintain.

Did this article help? Please leave us a comment or send us a KUDO-Tweet 🐦

Written by



Pedro is Symfony dev at KNP since 2012. Always happy to help his colleagues, his enormous code reviews, he is also trainer and speaker about his preferred topics : Code quality, Testing, delivering.