2016-02-19 49 views
1

我有以下的方法我想测试:对数据库内容测试方法没有输出

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

我应该如何正确测试它?

+0

可能会创建一个手动示例数据,格式为您希望从数据库或文件中获得的格式... – Webinan

+0

您当前的体系结构使测试变得困难。如果你设置了一个测试,你可以测试返回值(在这种情况下是一个数组) –

+0

嘿@Janusz Kowalski - 只是想知道其中一条评论或我的回答对你有帮助吗?您需要有关此问题或类似问题的进一步帮助? –

回答

0

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

  • 生成测试数据,并把它传递给你的方法(也,假数据库返回的数据或文件的内容)
  • 使用echo/var_dump()/die()检查方法中不同位置的属性和可变内容
  • 也可以使用这些命令来检查执行是否到达某个点(例如查看函数是否被调用)
  • 如果预期没有一条错误信息的东西不工作:检查逐行与上述方法,直到找到问题
  • 考虑使用接口依赖注入如果你的代码变得更大 - 这是一个有点用于此代码量,但可以在应用程序变大时节省大量时间

测试永远不会是一个自动过程,您将始终需要考虑什么是有意义的,什么不是。这些事情从来不是魔法,而是基本的PHP。

如果出现问题,您应该考虑让脚本抛出错误/异常。编写“无声”应用程序几乎从来都不是很好,因为如果您确实需要在生产环境中执行无提示执行,那么只需关闭错误报告并具有相同的效果即可。许多PHP函数在失败和/或成功时返回一些特殊的东西,你可以检查这个。数据库处理程序也这样做。帮你一个忙,并使用这些返回值!

相关问题