Unit testing 控制器单元测试失败,出现SQLSTATE[42000]错误

Unit testing 控制器单元测试失败,出现SQLSTATE[42000]错误,unit-testing,cakephp,cakephp-2.4,Unit Testing,Cakephp,Cakephp 2.4,我想对一个控制器动作进行单元测试,但在执行时遇到了一些问题。 我得到的错误如下: SQLSTATE[42000]:语法错误或访问冲突:1064您有 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在“questionExists”附近使用正确的语法 在1号线 方法: 问题存在 在问题模型中定义 我的测试函数如下所示: public function testView() { $result = $this->testAction('/questions

我想对一个控制器动作进行单元测试,但在执行时遇到了一些问题。 我得到的错误如下:

SQLSTATE[42000]:语法错误或访问冲突:1064您有 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在“questionExists”附近使用正确的语法 在1号线

方法:

问题存在

在问题模型中定义

我的测试函数如下所示:

public function testView() {
        $result = $this->testAction('/questions/questions/view/1', array('return' => 'vars'));
    }
我要测试的控制器操作如下所示:

public function testView() {
        $result = $this->testAction('/questions/questions/view/1', array('return' => 'vars'));
    }
公共函数视图($id=null){

这让我很困惑。
有人能给我指出正确的方向吗?

没有找到您的模型类,CakePHP会为该表动态创建一个实例,但这不超过基本模型类。然后调用代码时,它会尝试在应用程序中不是您的问题模型的实例上调用该方法。您必须弄清楚会发生什么

您可以检查问题对象的类(
debug(get_class($$this->Question));
-它将是
AppModel
)确认burzum的答案。典型的原因是文件名输入错误。可能的重复我认为这不是可能的重复。我只是在单元测试中得到错误。运行完美的appmis所有此类错误都有相同的原因:模型实例没有实现调用的方法。在您的案例中,可能有对的引用模型
Question
(这将是一个AppModel实例),在某些情况下在模型
Question.Question
之前找到。当您找到原因(到目前为止的注释仅描述了一种解决方法)时,请将其添加为答案=)。问题非常奇怪。添加此行后
public$uses=array('Questions.Question'))
在我的问题控制器中,测试运行得很好。但现在我对此感到非常困惑。我以前从未需要添加这一行。我还注意到,如果我使用
$this->autoMock=false;
一切都很好。在这种情况下,我想如果autoMock是真的,你的模型就会被模拟。所以你必须使用expec用于模型调用的tations。只需检查该对象是否为模拟对象,以及它是否为use expects()。