I just created a new object with an auto-number name field. Its Starting Number is 0. I ran many unit tests before creating any data, and the true Starting Number I observed is 1420. Is this observation consistent with platform behavior? Is it specific to sandboxes or does it also affect production?


Yes, autonumber field values will be incremented by unit tests. A new feature introduced in Spring '14 enables you to isolate autonumber values in tests from values used in production numbering.

Text from the Spring '14 Release Notes:

A new option has been added to ensure that auto-number fields in your organization's records don’t have gaps due to test records created in Apex tests. This option isolates the auto-number sequence used in Apex tests from the sequence used in your organization. As a result, the creation of test data in Apex tests doesn't cause the sequence of auto-number fields to be higher for new non-test records in your organization.

If this option isn’t enabled, there will be gaps in the auto-number field whenever Apex tests create test records with auto-number fields. For example, if Account has an auto-number field, and there are 50 account records in your organization, the field value of the last created account can be N-0050. After running an Apex test that creates five test accounts, this causes the auto-number sequence to be increased by five even though these test records aren’t committed to the database and are rolled back. Next time you create a non-test account record, its auto-number field value will be N-0056 instead of N-0051, hence, the gap in the sequence. If you enable this option before running an Apex test that creates test data, the auto-number sequence is preserved and the next non-test record will have a contiguous auto-number value of N-0051.

> You can enable this option from Setup by clicking Develop | Apex Test Execution | Options..., selecting Independent Auto-Number Sequence, and clicking OK.

Note that gaps in the auto-number sequence can still occur in other situations, for example, when triggers that attempt to insert new records fail to execute and records are rolled back. In this case, gaps can’t be completely avoided because, in the same transaction, some records can be successfully inserted while others are rolled back.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.