测试控制器=集成测试?

时间:2014-09-09 09:56:49

标签: php unit-testing controller integration-testing

之前我曾问过类似的问题。我们有一个论坛系统:

class ForumThread
{
    public function delete ($threadId)
    {
        Container::getPost()->deletePostsByThreadId ($threadId);
        Container::getSql()->sql ('DELETE FROM threads WHERE ID = '.$threadId);
    }
}

class Post
{
    public function deletePostsByThreadId ($threadId)
    {
        Container::getSql()->sql ('DELETE FROM posts WHERE THREAD_ID = '.$threadId);
    }
}

正如你所看到的,它从容器中获取post和thread对象,它可以被替换,模拟等等。当进行单元测试时,我觉得缺少了一些东西:所以,可以测试一个论坛帖子是否真的删除 - 所以也发布。这是单元测试 - 但它们是否一起工作?如果他们独立工作,那就不能保证他们能够很好地协同工作。如果两个乐高元素做得很好,它们可能不适合彼此。 在这里输入集成测试:

class Controller
{
    function controllerDelete()
    {
        Container::getForumThread()->delete ($_POST['ID']);
    }
}

我想在这里我可以检查两个SQL表。我的理论可以吗?因为如果控制器测试是单元测试的,它就没有意义,因为控制器通常是最短的类(一旦我做了测试ForumThread :: delete,测试控制器:: controllerDelete将是相同的

1 个答案:

答案 0 :(得分:4)

正如您所知,Unit testing主要集中在应用程序的最小可测试部分。所以,如果他们通过 - 你的单位水平是好的。 Integration testing是另一回事 - 模块组合并作为一个组进行测试。所以作为底线:

  

我的理论可以吗?

是。您需要在此级别的控制器测试中涵盖的内容是您已根据应用程序设计和要求放置的功能,性能和可靠性。