### Question:
AppController extends Application { public String getPersonId() { return String.format("%s_person_%s_%s", Utils.getAndroidID(getContentResolver()), Utils.getUniversalTimestamp(), Utils.getSaltString(16)); }  @Override void onCreate(); String getAzureConnection(); boolean isAdmin(); static synchronized AppController getInstance(); String getPersonId(); String getMeasureId(); String getArtifactId(String type); String getArtifactId(String type, long timestamp); String getDeviceId(); File getRootDirectory(); boolean isUploadRunning();  }### Answer:
@Test public void getPersonId() { String valid = String.format("%s_person_%s_%s", "AndroidUUID", Utils.getUniversalTimestamp(), Utils.getSaltString(16)); String invalidId = "9e58cfb935e72628_Mandloi_1545035711986_cyd2vEf3TUTPBzyq"; String[] array = valid.split("_"); Assert.assertEquals("Person ID schema is not correct, expect 3 underscores", 4, array.length); Assert.assertEquals("Wrong object name, expected : person", "person", array[1]); try { long timestamp = Long.parseLong(array[2]); } catch (NumberFormatException e) { Assert.fail("timestamp is not correct format"); } Assert.assertEquals("Random string generated incorrectly", 16, array[3].length()); }