Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我有一个简单的代码。如何为它编写测试?_Php_Automated Tests_Phpunit_Functional Programming - Fatal编程技术网

Php 我有一个简单的代码。如何为它编写测试?

Php 我有一个简单的代码。如何为它编写测试?,php,automated-tests,phpunit,functional-programming,Php,Automated Tests,Phpunit,Functional Programming,当im编写这段代码时,我没有使用phpunit和函数测试,因为我不知道如何为这段代码编写测试。我知道如何为其他函数和代码编写测试,但我不知道这段代码需要哪个测试。有人能解释一下吗? 所有函数都是GoogleAdWordsAPI。不是我自己的。我也不需要测试它们 $adStatsSelector = new AdStatsSelector(); $adStatsSelector->dateRange = new DateRange('20100901','20101001

当im编写这段代码时,我没有使用phpunit和函数测试,因为我不知道如何为这段代码编写测试。我知道如何为其他函数和代码编写测试,但我不知道这段代码需要哪个测试。有人能解释一下吗? 所有函数都是GoogleAdWordsAPI。不是我自己的。我也不需要测试它们

    $adStatsSelector = new AdStatsSelector();
$adStatsSelector->dateRange = new
      DateRange('20100901','20101001');
$user = new AdWordsUser();
$user->LogDefaults();
$servicedAccountService = $user->GetServicedAccountService('v201008');
$selector = new ServicedAccountSelector(); 
$graph = $servicedAccountService->get($selector); 
foreach($graph->accounts as &$account) {
    $user->SetClientId($account->login);
    $campaignService = $user->GetCampaignService('v201008');
    $selector = new CampaignSelector(null,null,$adStatsSelector);
    $page = $campaignService->get($selector);
    $account->campaigns = $page->entries;
}

正如代码所示,很难定义测试,因为它不是我们可以调用的形式;我们不能改变输入并确保获得特定的输出

因此,我所能看到的最好情况是,您可以测试图形是否最终填充了预期的数据。不知何故,您调用了这段代码并查看了图中的内容

现在看看代码,我想到了几个问题:

  • 为什么日期范围是硬编码的
  • v201008是什么,为什么是硬编码的
  • 错误处理在哪里?那些$user->可以吗???方法失败
  • 因此,我将修改这段代码以将其推广,并将其放入函数中。然后我们可以测试这个函数。想象一个函数(在伪代码中)

    现在您可以改变输入并检查响应,但是。。。你怎么知道该怎么回答?你最好模仿你使用的服务。然后,您还可以断言您正在使用正确的参数调用服务,并且对于某些测试,会强制服务提出错误条件


    总结:编写可测试的代码确实有助于您进行测试,在这样做的过程中,您往往会将注意力集中在枯燥但重要的事情上,例如错误处理。

    就代码而言,很难定义测试,因为它不是我们可以调用的形式;我们不能改变输入并确保获得特定的输出

    因此,我所能看到的最好情况是,您可以测试图形是否最终填充了预期的数据。不知何故,您调用了这段代码并查看了图中的内容

    现在看看代码,我想到了几个问题:

  • 为什么日期范围是硬编码的
  • v201008是什么,为什么是硬编码的
  • 错误处理在哪里?那些$user->可以吗???方法失败
  • 因此,我将修改这段代码以将其推广,并将其放入函数中。然后我们可以测试这个函数。想象一个函数(在伪代码中)

    现在您可以改变输入并检查响应,但是。。。你怎么知道该怎么回答?你最好模仿你使用的服务。然后,您还可以断言您正在使用正确的参数调用服务,并且对于某些测试,会强制服务提出错误条件


    总结:当你想测试东西时,编写可测试的代码真的很有帮助,在这样做的过程中,你往往会把注意力集中在枯燥但重要的事情上,比如错误处理。

    +1编写得很好。您可能希望包含一些指向php模拟库的链接,并可能提及IoC/DI。@Klaus谢谢。有一件事让我很困惑,人们有很多好的想法,可以编辑答案并加以改进。这种情况很少发生。如果你有一个最喜欢的模仿库,为什么不编辑答案并提出来呢?你是对的。问题是,我不使用php,我不想推荐我在没有使用它的情况下通过谷歌搜索找到的第一个库。此外,我并没有承诺改善你的答案,并(可能)为你赢得额外的声誉;-)但你是对的。很少有人真正编辑答案。编辑问题更常见。我想这真的与尊重回答者有关(可能还有代表的事情)。@Klaus,我自己实际上没有做过任何严肃的PHP,这就是为什么我不知道有什么样的模拟库可以推荐的原因。声誉当然也是我的一个因素,人类为了回报而工作。很遗憾,这样做并不能为协作工作提供切实的回报。谢谢,你的回答帮助了我。我需要写一个可测试的代码。而且我需要在3d派对课上使用mock。+1写得很好。您可能希望包含一些指向php模拟库的链接,并可能提及IoC/DI。@Klaus谢谢。有一件事让我很困惑,人们有很多好的想法,可以编辑答案并加以改进。这种情况很少发生。如果你有一个最喜欢的模仿库,为什么不编辑答案并提出来呢?你是对的。问题是,我不使用php,我不想推荐我在没有使用它的情况下通过谷歌搜索找到的第一个库。此外,我并没有承诺改善你的答案,并(可能)为你赢得额外的声誉;-)但你是对的。很少有人真正编辑答案。编辑问题更常见。我想这真的与尊重回答者有关(可能还有代表的事情)。@Klaus,我自己实际上没有做过任何严肃的PHP,这就是为什么我不知道有什么样的模拟库可以推荐的原因。声誉当然也是我的一个因素,人类为了回报而工作。很遗憾,这样做并不能为协作工作提供切实的回报。谢谢,你的回答帮助了我。我需要写一个可测试的代码。我需要在3d party类中使用Mock。你测试一下,对于给定的输入,你会收到一个特定的预期输出。您的问题和包含的代码都没有显示输入和输出是什么。请澄清,我们可能会帮助您为其编写一个测试。您对给定的输入进行测试,您将收到特定的预期输出。您的问题和包含的代码都没有显示输入和输出是什么。请澄清,我们可能会帮助您编写测试。
     graph = getGraph(start, end, version)