首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何操作应用程序信任控制器测试?

如何操作应用程序信任控制器测试?
EN

Stack Overflow用户
提问于 2020-02-27 18:09:23
回答 1查看 40关注 0票数 1

我正在为ZF3应用程序编写功能/控制器测试(由PHPUnit和zendframework/zend-test驱动)。如下所示:

代码语言:javascript
复制
public function testWhatEver()
{
    $this->dispatch('/');
    $this->assertResponseStatusCode(Response::STATUS_CODE_200);
}

效果很好。但是现在我遇到了一个案例,我需要用多个相互排斥的信任来测试应用程序。

例如,“身份验证”:应用程序提供多个身份验证方法(比方说:AuthAAuthBAuthC)。(这是通过在配置文件中设置auth.type值来配置的。)我想测试它们中的每一个。这意味着,在/config/autoload/test/*{local|global}.php中拥有特殊的测试信任是不够的。我需要能够为每个测试操作它们(在调用dispatch(...)方法之前)。

如何操作应用程序信任控制器测试(动态)?

如果找不到更好的解决方案,可能的解决办法是在每次测试之前编辑配置文件(使用file_put_contents(...)或类似的方法)。但它有点丑(慢)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-28 17:07:04

总的来说,我认为这个问题没有很好的解决办法。但也有一些或多或少可以接受的解决办法:

解决方案1:为每个测试操作相应的配置文件

  1. $configs = file_get_contents(...)
  2. searchByRegexAndManipulateConfigs(...)
  3. file_put_contents(...)

这需要付出很大的努力,并且会使测试变得更慢(因为从文件系统读取/写入文件系统)。

解决方案2:只有一个配置值的简单文件

我们可以创建像config.auth.type.phpconfig.auth.type.txt这样的文件(每个配置值都有一个文件),并在配置中使用incluefile_get_contents(...)调用作为值。在执行测试之前,需要对文件中的值进行操作。

这稍微少了一点努力(我们不需要编写复杂的RegEx),但可能会使测试速度慢得多,因为每个应用程序请求都会从读取一个额外的文件开始。

GLOBALS 3:通过传递信任值

这是最简单也是最快的变体。我们只需将所需的值保存到全局变量中,并在config (File)数组中读取它。测试结束后,我们移除变量:

AuthBTest

代码语言:javascript
复制
...
protected function setUp() // or setUpBeforeClass()
{
    parent::setUp();
    $GLOBALS['appTestConfigs']['auth.type'] = 'AuthA';
}

protected function tearDown() // or tearDownAfterClass()
{
    parent::tearDown();
    unset($GLOBALS['appTestConfigs']);
}
...

/config/autoload/test/local.php

代码语言:javascript
复制
return [
    'auth' => [
        'type' => isset($GLOBALS['appTestConfigs']['auth.type']) ? $GLOBALS['appTestConfigs']['auth.type'] : 'AuthA',
    ],
];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60439319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档