代码之家  ›  专栏  ›  技术社区  ›  learningtech

依赖于正在测试的工具的特性测试?

  •  -1
  • learningtech  · 技术社区  · 4 年前

    我随机挑选了一个我朋友做的拉雷维尔项目。我看到他们用 app/ 文件夹来组织所有通常的东西,如模型,数据传输对象,控制器等。。。基本上这个项目负责的restapi的所有应用程序逻辑。

    tests/feature 其中包含了我最近学到的特性测试。我发现有趣的是这样的代码:

    use App\Profile;
    
    class HobbyFeatureTest extends FeatureTestCase
    {
        // other code ...etc...
        public function testGetUserHobbyyOnUserWithNoHobby()
        {
            $response = $this->getJson('api/user/me/hobbies')->assertOk();  /// makes a PHP curl call
            $response->assertJson($this->profile->hobby->toArray());
        }
        // other code ...etc...
    }
    

    基本上 $this->profile 是的一个实例 App\Profile api/user/me/hobbies 也取决于 应用程序\配置文件 在它的构造中。


    我问题的背景

    1. 我希望我的特性测试的底层代码尽可能与正在测试的代码隔离。我试着把 double-entry bookkeeping in accounting

    根据我写测试的其他经验,我觉得奇怪的是,Laravel采用的方法没有意识到我在上面两点中提到的好处。因此,我想更好地理解Laravel以他们所做的方式实现特性测试的动机,或者如果将特性测试放在单独的代码库中存在固有的错误呢?

    0 回复  |  直到 4 年前
        1
  •  1
  •   mrhn    4 年前

    中的功能测试 Laravel ,我称之为现代集成测试。其中,集成测试是将系统的多个部分一起测试。在此,数据库 拉威尔 代码,但不是web服务器,因为这是一种模拟API的假方法,而不是使用像 Apache Nginx .

    Laravels 模特们都是一个很麻烦的嘲弄者,会拿嘲笑的每一个口若悬河的电话,很快就能成为一对。相反,在特性测试中,您可以轻松地创建一个测试,该测试会影响整个系统。这遵循了Laravel的基本方法,它应该是 with expressive, elegant syntax laravel.com 为了那句话。

    public function testSeeProfile () {
        $profile = factory(Profile::class)->create();
    
        $response = $this->json('api/profile/' . $profile->id);
    
        $response->assertJson(...);
    }
    

    这就是编写测试、测试逻辑、数据库层和开发人员关心的所有内容的容易程度。在 拉威尔

    这并不能代替真正的特性测试,而实际的特性测试应该用 Dusk Selenium , Cypress 拉威尔 有黄昏,可以在你的项目中做到这一点。在真正的web服务器被使用之前,它不是一个“真正的”特性测试 拉威尔 功能测试仍然不能做到这一点。