develop with

How to generate test numbers in Java

Using Google Phone Utils

To help with the number generation we can leverage Googles Phone Library. The library is primarily used for parsing numbers and validating them. But they do have a test utility that generates an example number. This example number unfortunately is only one number and can’t be used in a bunch of random tests.

Get library

Resolve the dependency through maven by defining it in your pom.xml.

<dependency>
    <groupId>com.googlecode.libphonenumber</groupId>
    <artifactId>libphonenumber</artifactId>
    <version>8.10.9</version>
</dependency>
or load via gradle:

<div class="highlight"><pre class="chroma"><code class="language-json" data-lang="json"><span class="err">compile</span> <span class="err">group:</span> <span class="err">&#39;com.googlecode.libphonenumber&#39;,</span> <span class="err">name:</span> <span class="err">&#39;libphonenumber&#39;,</span> <span class="err">version:</span> <span class="err">&#39;</span><span class="mf">8.10</span><span class="err">.</span><span class="mi">9</span><span class="err">&#39;</span></code></pre></div>

## Library usage ##
What we will do is generate the example number as a base for our test number. We'll take that number remove the last 4 digits and replace it with a random 4 digits that will be our test number.

Here is the code:
<div class="highlight"><pre class="chroma"><code class="language-java" data-lang="java"><span class="n">PhoneNumberUtil</span> <span class="n">util</span> <span class="o">=</span> <span class="n">PhoneNumberUtil</span><span class="o">.</span><span class="na">getInstance</span><span class="o">();</span>
<span class="n">PhoneNumber</span> <span class="n">number</span> <span class="o">=</span> <span class="n">util</span><span class="o">.</span><span class="na">getExampleNumberForType</span><span class="o">(</span><span class="n">PhoneNumberType</span><span class="o">.</span><span class="na">MOBILE</span><span class="o">);</span>
<span class="n">String</span> <span class="n">exampleNumber</span> <span class="o">=</span> <span class="n">util</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">number</span><span class="o">,</span> <span class="n">PhoneNumberFormat</span><span class="o">.</span><span class="na">RFC3966</span><span class="o">);</span>

<span class="n">String</span> <span class="n">updatedNumberString</span> <span class="o">=</span> <span class="n">exampleNumber</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span><span class="n">0</span><span class="o">,</span> <span class="n">exampleNumber</span><span class="o">.</span><span class="na">length</span><span class="o">()-</span><span class="n">4</span><span class="o">);</span>
<span class="n">Random</span> <span class="n">random</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Random</span><span class="o">();</span>
<span class="kt">int</span> <span class="n">lastDigits</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="n">10000</span><span class="o">);</span>
<span class="n">DecimalFormat</span> <span class="n">df4</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DecimalFormat</span><span class="o">(</span><span class="s">&#34;0000&#34;</span><span class="o">);</span> <span class="c1">// 4 zeros
</span><span class="c1"></span><span class="n">String</span> <span class="n">textPhoneNumber</span> <span class="o">=</span> <span class="n">updatedNumberString</span> <span class="o">+</span> <span class="n">df4</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="n">lastDigits</span><span class="o">);</span></code></pre></div>

The important detail to to make sure you use the `DecimalFormat` class to make sure that randoms that are 3 can be interpreted as 0003 and randoms over 4 digits will be truncated.

Some references to follow up on:
* (https://stackoverflow.com/q/4574713)
* (https://stackoverflow.com/questions/4574713/generate-random-number-with-restrictions)
* (https://groups.google.com/forum/#!topic/libphonenumber-discuss/rTyhA12dpLE)

If you have some other suggestions, feel free to comment below.
comments powered by Disqus

Want to see a topic covered? create a suggestion

Get more developer references and books in the developwith store.