2016-07-24 34 views
0

Ich möchte die Funktionalität des Hinzufügens von Benutzer testen.Ist es in Ordnung, das Repository mit Behat zu testen?

Ich schrieb das folgende Szenario:

Feature: Add users 
    In order to have users 
    As an admin 
    I need to be able to add users to database 

    Rules: 
    - User has a name 

    Scenario: Adding user with name 'Jonas' 
    Given There is no user 'Jonas' 
    When I add the user with name 'Jonas' 
    Then I should have user 'Jonas' in a system 

Und den folgenden Test:

<?php 

use AppBundle\Repository\UserRepository; 
use Behat\Behat\Tester\Exception\PendingException; 
use Behat\Behat\Context\Context; 
use Behat\Behat\Context\SnippetAcceptingContext; 
use Behat\Gherkin\Node\PyStringNode; 
use Behat\Gherkin\Node\TableNode; 
use AppBundle\Entity\User; 
use Symfony\Component\Config\Definition\Exception\Exception; 

/** 
* Defines application features from the specific context. 
*/ 
class FeatureContext implements Context, SnippetAcceptingContext 
{ 
    private $userRepository; 

    /** 
    * Initializes context. 
    * 
    * Every scenario gets its own context instance. 
    * You can also pass arbitrary arguments to the 
    * context constructor through behat.yml. 
    */ 
    public function __construct(UserRepository $userRepository) 
    { 
     $this->userRepository = $userRepository; 
    } 

    /** 
    * @Given There is no user :arg1 
    */ 
    public function thereIsNoUser($arg1) 
    { 
     $user = $this->userRepository->findOneBy(['name' => $arg1]); 
     if ($user) { 
      $this->userRepository->delete($user); 
     } 
    } 

    /** 
    * @When I add the user with name :arg1 
    */ 
    public function iAddTheUserWithName($arg1) 
    { 
     $user = new User($arg1); 
     $this->userRepository->add($user); 
    } 

    /** 
    * @Then I should have user :arg1 in a system 
    */ 
    public function iShouldHaveUserInASystem($arg1) 
    { 
     $user = $this->userRepository->findOneBy(['name' => $arg1]); 

     if (!$user) { 
      throw new Exception('User was not added'); 
     } 

     $this->userRepository->delete($user); 
    } 
} 

Ich bin nicht sicher, ob ich es in der richtigen/Qualität Art und Weise zu tun, würde so guter Programmierer seine guten denken . Teste ich wie ich will? Oder sollte ich dies von Ende zu Ende testen - rufen Sie die Controller-Methode und überprüfen Sie die Antwort? Calling Controller-Methode würde mehr testen, glaube ich, weil wir etwas in Cotroller auch brechen können, zum Beispiel der Status-Code zurückgegeben, oder JSON-Format.

Aber in Béhat Dokumentation sah ich ein Beispiel für Tests nur bestimmte Klasse - Korb und Regal:

http://docs.behat.org/en/v3.0/quick_intro_pt1.html

Also dachte ich - ich bestimmte Klasse auch testen können - Repository.

und eine Steuerung Methode aufzurufen ich müsste auch einigen gefälschten Browser - http://mink.behat.org/en/latest

, die mehr Arbeit sein könnten.

Antwort

0

Ja, Sie können testen, was Sie wollen, aber es ist eine gute Übung, einige Funktionen mit Szenarien/Flows zu definieren.

Wenn Sie wollen und müssen Ende zu Ende testen dann tun, sonst testen, was Sie getestet werden müssen.

Im Zusammenhang mit der Controller-Methode Aufruf sollten Sie tun, was logisch ist und bringen Sie Wert auf Ihre Suite, alles, was Sie beachten müssen, ist die Ausnahme behandeln und die entsprechenden Ausnahmen werfen, die für Sie sinnvoll sind.

Versuchen Sie, einen schnellen Plan zu erstellen, Sie können auch mit den Leuten aus dem Team diskutieren, die dem Automatisierungsansatz einen wertvollen Input geben können, was Sie abdecken müssen.

Andere Dinge zu beachten: Werfen Sie einen Blick auf Mink-Treiber und auch auf Seitenobjekte.