I am trying to test my first functional tests. I would like to know if my functional test is well done, or if the structure of it is not optimal.Any advice will be useful to me. As I said, I just started writing functional tests, so I have major doubts about my test method which regroups all of a sudden or should it separate?<?phpnamespace Api\Tests\Post;require_once __DIR__.'/../../../vendor/autoload.php';use Api\Util\Error;use Silex\Application;use Silex\WebTestCase;use Symfony\Component\Debug\ExceptionHandler;use Symfony\Component\HttpFoundation\Response;class UserTest extends WebTestCase{/** * Basic, application-wide functional test inspired by Symfony best practices. * Simply checks that all application URLs load successfully. * During test execution, this method is called for each URL returned by the provideUrls method. * * @dataProvider provideUrls * @param $url */public function testPageIsSuccessful($url){    $password   = '%sZ69%$%C5sRz4_5Od$46#5';    /**     * Create user with just field required     */    $client     = $this->createClient();    $randomName = rand(1000, 999999);    $client->request(        'POST',        $url,        array(),        array(),        Error::$header,        '{            email:test+'.$randomName.'@Test.com,            password:'.$password.',            gender:m,            firstName:Test,            lastName:'.$randomName.'        }'    );    $object = json_decode($client->getResponse()->getContent(), false);    $this->assertNotNull($object);    $this->assertTrue(is_object($object));    $this->assertEquals($randomName, $object->lastName);    $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode(), $client->getResponse()->getContent());    /**     * Create user with all field     */    $client     = $this->createClient();    $randomName = rand(1000, 999999);    $client->request(        'POST',        $url,        array(),        array(),        Error::$header,        '{            email:test2+'.$randomName.'@Test.com,            password:'.$password.',            gender:m,            firstName:Test,            lastName:'.$randomName.',            image:null,            address:null,            enabled:1,            locked:0,            role:[ROLE_ANDROID],            content:Une description complte sur cette personne,            birthday:1991-06-12,            facebookId:null,            avatar:null,            phone:0601020304,            profession:Robot,            iHostWith:null        }'    );    $object = json_decode($client->getResponse()->getContent(), false);    $this->assertNotNull($object);    $this->assertTrue(is_object($object));    $this->assertEquals($randomName, $object->lastName);    $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode(), $client->getResponse()->getContent());    /**     * Create user with birthday not good     */    $client     = $this->createClient();    $randomName = rand(1000, 999999);    $client->request(        'POST',        $url,        array(),        array(),        Error::$header,        '{            email:test3+'.$randomName.'@Test.com,            password:'.$password.',            gender:m,            firstName:Test,            lastName:'.$randomName.',            image:null,            address:null,            enabled:1,            locked:0,            role:[ROLE_ANDROID],            content:Une description complte sur cette personne,            birthday:2001-06-15,            facebookId:null,            avatar:null,            phone:0601020304,            profession:Robot,            iHostWith:null        }'    );    $object = json_decode($client->getResponse()->getContent(), false);    $this->assertEquals(Error::USER_AGE_MIN_REQUIRED, $object->code);    $this->assertEquals(Response::HTTP_BAD_REQUEST, $client->getResponse()->getStatusCode(), $client->getResponse()->getContent());    /**     * Create user with birthday good     */    $client     = $this->createClient();    $randomName = rand(1000, 999999);    $client->request(        'POST',        $url,        array(),        array(),        Error::$header,        '{            email:test3+'.$randomName.'@Test.com,            password:'.$password.',            gender:m,            firstName:Test,            lastName:'.$randomName.',            image:null,            address:null,            enabled:1,            locked:0,            role:[ROLE_ANDROID],            content:Une description complte sur cette personne,            birthday:1991-06-12,            facebookId:null,            avatar:null,            phone:0601020304,            profession:Robot,            iHostWith:null        }'    );    $object = json_decode($client->getResponse()->getContent(), false);    $this->assertNotNull($object);    $this->assertTrue(is_object($object));    $this->assertEquals($randomName, $object->lastName);    $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode(), $client->getResponse()->getContent());    /**     * Create user with password with min letters     */    $client     = $this->createClient();    $randomName = rand(1000, 999999);    $client->request(        'POST',        $url,        array(),        array(),        Error::$header,        '{            email:test3+'.$randomName.'@Test.com,            password:12345,            gender:m,            firstName:Test,            lastName:'.$randomName.',            image:null,            address:null,            enabled:1,            locked:0,            role:[ROLE_ANDROID],            content:Une description complte sur cette personne,            birthday:1991-06-12,            facebookId:null,            avatar:null,            phone:0601020304,            profession:Robot,            iHostWith:null        }'    );    $object = json_decode($client->getResponse()->getContent(), false);    $this->assertEquals(Error::USER_PASSWORD_TOO_SHORT, $object->code);    $this->assertEquals(Response::HTTP_BAD_REQUEST, $client->getResponse()->getStatusCode(), $client->getResponse()->getContent());}/** * {@inheritDoc} */public function createApplication(){    $app = new Application();    require __DIR__.'/../../../app/config/dev.php';    require __DIR__.'/../../../app/app.php';    require __DIR__.'/../../../app/routes.php';    // Generate raw exceptions instead of HTML pages if errors occur    ExceptionHandler::register(false);    // Simulate sessions for testing    $app['session.test']            = true;    // Enable anonymous access to admin zone    $app['security.access_rules']   = array();    return $app;}/** * Provides all valid application URLs. * * @return array The list of all valid application URLs. */public function provideUrls(){    return [        array('/users/')    ];}}
Functional test with PHPUnit / Symfony
beginner;php;phpunit