我想测试添加用户的功能。
我写了以下场景:
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
以下测试:
<?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);
}
}
我不确定我是否以正确/优质的方式做到这一点,所以优秀的程序员会认为它很好。 我是否按照我想要的方式进行测试?或者我应该从头到尾测试这个 - 调用控制器方法并检查响应?调用控制器方法会测试更多我相信,因为我们也可以在cotroller中破坏某些东西,例如返回的状态代码,或者json格式。
但是在behat文档中,我看到了一个测试特定类的例子 - 篮子和架子:
http://docs.behat.org/en/v3.0/quick_intro_pt1.html
所以我想 - 我也可以测试特定的类 - 存储库。
要调用控制器方法,我还需要使用一些虚假的浏览器 - http://mink.behat.org/en/latest
这可能会更有效。
答案 0 :(得分:0)
是的,您可以测试您想要的内容,但是使用方案/流程定义某些功能是一种很好的做法。
如果您想要并且需要端到端测试,那么请测试您需要测试的内容。
与控制器方法调用相关,您应该执行逻辑操作并为您的套件带来价值,您需要记住的是处理异常并抛出对您有意义的适当异常。
尝试制定快速计划,您还可以与团队成员讨论,这些人员可以为自动化方法添加一些有价值的信息,以及您需要涵盖的内容。
要记住的其他事项:看看Mink驱动程序以及Page Objects。