没有输出的测试方法

时间:2016-02-19 19:53:42

标签: php phpunit

我想测试以下方法:

class SomeObject {
   public function actionFromSomeController() {
       $obj = new OtherObject();
       $obj -> setAttributes();
       $obj -> doAction();
   }
}

class OtherObject {
   private $_attr;
   public function setAttributes() {
      $this -> _attr = 'something';
      Database :: execute('INSERT INTO table VALUES (' . $this -> _attr . ')');
      $fileObj = new FileObj();
      $content = $fileObj -> getSomeFileContent();
      // do something else
   }
   public function doAction() {
      echo $this -> _attr;
   }
}

现在我想测试这个方法,它的输出取决于数据库内容和服务器上的一个文件。它在路上做了很多事情,输出只是一个ID和success => 1

我该如何正确测试?

1 个答案:

答案 0 :(得分:0)

关于如何测试这样的小代码片段的一些想法:

  • 生成测试数据并将其传递给您的方法(也就是假数据库返回数据或文件内容)
  • 使用$slugname = basename(get_permalink()); include $slugname.'.php'; / echo / var_dump()检查方法中不同位置的属性和变量内容
  • 还可以使用这些命令检查执行是否到达某个点(例如,查看函数是否被调用)
  • 如果没有错误信息,某些内容无法按预期工作:使用上述方法逐行检查,直至找到问题
  • 如果您的代码变大,请考虑使用接口依赖注入 - 这对于此代码量来说有点过分,但可能是一个巨大的时间 - 当您的应用程序变大时保护

测试绝不是一个自动过程,你总是要考虑做什么和不做什么是有意义的。这些要做的事情从来都不是神奇的,而是基本的PHP。

如果出现问题,您应该考虑让脚本抛出错误/异常。写作"沉默"应用程序几乎永远不会好,因为如果你真的需要在生产环境中进行静默执行,只需关闭错误报告并产生相同的效果。许多PHP函数在失败和/或成功时返回特殊内容,您可以检查这一点。数据库处理程序也是如此。帮自己一个忙,并使用这些返回值!

相关问题