# Testing (And The Freedom To Choose Your Tests)

Like the [freedom of choice for technology for our teams](../become-a-better-engineer/freedom-to-choose-your-engineering-hammer), the same applies for the types of tests used. Each team picks, defines, writes and conducts their own tests. E.g., a team developing an API backend can write in their programming language, framework and tooling, and write tests in that particular ecosystem.

Backends written in Java can use:

* AssertJ library for writing assertions;
* JUnit for unit tests;
* SpringBootTest framework and Mockito testing framework for mocks for integration tests;
* Test containers or any other tool of choice you have in your arsenal.

Other languages can use their specific testing libraries and frameworks.

However, you're not alone in all of this. Providing quality service to our customers is one of Infobip‘s top priorities. We've got you covered in two different ways, one where you can help yourself, and another where we help you even further:

1. **The CI/CD pipeline:** When you create a change in code that you covered with tests, new version of your service is built inside Jenkins only if your tests pass. And once you have a proper release version, it is deployed on our proprietary Deployment Manager tool. There your service will be deployed via Canary deployment procedure - only allowing partial traffic to flow into your new instance and reverting the deployment if it encounters errors. Deployment Manager can also run smoke tests and optional pre- or post- deployment hooks for any custom testing or service logic you require. All this exists to safeguard you from deploying a faulty service to our test environment, and after that, to production.
2. We went so far to even create a department called **Quality RA** (more on Requirement Areas on organizational structure part) which helps when things get hairy. Teams within Quality RA have specialized skill-set for quality control and test automation while also having vast knowledge about Infobip platform in general. They perform testing and write automated end to end tests to cover that the core product functionality works as intended on every change.

Having various test steps throughout your deployment flow shows how serious we are about quality. From static code analysis, unit and functional testing, through end-to-end and stress testing, all the way to disaster recovery testing - we do it all. And you are covered every step of the way.
