When developing a mobile app or testing for mobile compatibility, it can be difficult, time consuming and expensive to build a collection of all the mobile devices your testing team will need to test its software. After all, there are tons of mobile devices on the market today: the iPhone, Android phones, Windows phones, Google phones, and that’s without getting into testing for different versions of OS! It can be tempting to skip all that and just use an emulator.

Don’t give into that impulse. Here are several important reasons why emulators are not a reliable option for use in mobile software testing.

Mobile Emulators Reduce Data Accuracy

For the greatest accuracy in software testing, you always want to make sure that your testing environment matches your production environment as closely as possible. When you use an emulator instead of an actual mobile device to test your mobile app, you are not working with real data.

Ultimately, an emulator is not a mobile device; it is a program you run on a computer to mimic a mobile device, and does not have all the capabilities of a real phone. For example: if your app uses the phone’s accelerometer, where is your emulator getting that information? The computer you’re running the emulator on doesn’t have an accelerometer, but the emulator has to get that information from somewhere in order to properly test your app. The emulator will run software, or a relevant part of its own software, that creates a pretend environment and feed the data from that environment into the emulator.

In other words, you’re basing your sense of whether or not your software works properly on fake environmental data being run through a fake phone, and assuming that the (fake) data will be accurate. Or, you could test on an actual mobile device and get real data on a real device.

Mobile Emulators Add Extra Layers of Error

Software is complex and interacts with other software in equally complex ways. That’s why regression testing is so important: make one change to your software’s code, or reference a separate software which has updated its own code, and you can end up with a mess where you once had a perfectly functioning app. When you use an emulator, you are adding layers of complexity which increase your chance of conflicting bits of code.

It’s easy to see how this snowballs in action. First, you have your mobile app. That’s one layer of software with its own quirks. Then, let’s say, your app is meant to reference the weather in your user’s locality. Your app then needs to work with the information from another source, like the weather widget on your user’s phone. That’s a second layer, increasing the chances of a bug. Then, thirdly, you finally add the emulator– the emulator which is emulating both the phone itself and the weather data the “phone” is accessing. That’s four layers of potential error! If only one of those layers malfunctions during testing, especially if the malfunctioning software is the emulator itself, you end up trying to work out a bug that might not even be there if you were using a real phone.

Always Test on Mobile Devices Before Release

Ultimately, the user experience one would get from an emulated mobile device is just not the same your actual end user will be getting. Using an emulator to test your mobile app or mobile compatibility rests on guesses and assumptions, not on real performance data.

Sometimes, though, using an emulator can’t be helped. Maybe your in-house software testing doesn’t have the right mobile devices to test on. Maybe the program is meant to be used in a situation you just can’t recreate in a testing environment for a long period of time. Just make sure your testing team is doing its best to keep the testing environment as close to the actual user experience as possible.

However, at some point, your mobile software needs to be tested on a real device before it’s released. If you only test on emulators, you only have emulated data. If you release your mobile app to the App Store built only on assumptions, beware– your customers may find the problem before you do.