代码之家  ›  专栏  ›  技术社区  ›  Tim Fountain

单元测试返回SQL的类

  •  0
  • Tim Fountain  · 技术社区  · 15 年前

    public function testEtcGeneratesCorrectSQL()
    {
        $model = new ClassBeingTested();
    
        // do some stuff
    
        $sql = $model->__toString();
    
        $this->assertEquals('SELECT foo.* FROM foo WHERE bar = 1', $sql);
    }
    

    问题是适配器之间转义的差异。如果我使用Pdo_Mysql运行这个测试,我会得到如下错误:

    --- Expected
    +++ Actual
    @@ @@
    -SELECT foo.* FROM foo WHERE bar = 1
    +SELECT `foo`.* FROM `foo` WHERE `bar` = 1
    

    如果使用Sqlite适配器:

    --- Expected
    +++ Actual
    @@ @@
    -SELECT foo.* FROM foo WHERE bar = 1
    +SELECT "foo".* FROM "foo" WHERE "bar" = 1
    

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alan Pearce    15 年前

    使用常量而不是硬编码任何一组引号,因此对于MySQL:

    $this->assertEquals('SELECT ' . DB_QUOTE . 'foo' . DB_QUOTE . '.* FROM '
                        . DB_QUOTE . 'foo' . DB_QUOTE . ' WHERE '
                        . DB_QUOTE . 'bar' . DB_QUOTE . ' = 1');
    

    推荐文章