testhelper-classes的正确位置是什么? (phpunit /最佳实践)

时间:2011-04-18 07:55:16

标签: php unit-testing phpunit

我想用PHPUnit测试我的应用程序。所以我像往常一样拥有我的应用程序类和第二个带有测试类的树。现在我需要测试一种Dummy / Mock-Objects,我想知道应该放在哪里。它是一个不同的用例,它应该放在常见的lib文件夹中或者更喜欢什么?

3 个答案:

答案 0 :(得分:1)

在我不使用模拟对象但是为测试用例创建一个抛弃子类的情况下,我将该类命名为测试用例的前缀,并将其放在测试用例本身之后的同一文件中。 / p>

测试用例前缀避免了类的名称与任何实际类冲突的可能性,并且将代码放在同一个文件中可以很容易地使用测试。如果您发现需要为一个测试用例创建多个子类,这可能是您的课程过多的信号。

class MyClassTest extends PHPUnit_Framework_TestCase
{
    function setUp() {
        $this->fixture = new MyClassTest_DoesNothing;
    }
}

class MyClassTest_DoesNothing extends MyClass
{
    ...
}

答案 1 :(得分:1)

我喜欢镜像我正在处理的项目的文件结构。

/project
  app/
  app/models/BankAccount.php
  tests/
    suite/
      app
      app/models/BankAcountTest.php
    mocks
      app/
      app/models/BankAccountMock.php

我发现这样做可以保持一切井井有条。如果我不打算重用它们,我会在测试用例文件中放置小模拟或存根。正如其他评论中所述,大多数Mocks都可以由PHPUnit生成,但有时候只需要自己动手。

答案 2 :(得分:0)

没有建议放置硬编码存根或模拟的位置。每当我觉得需要与需要的测试相同的文件夹中的特定外部资源时,我倾向于添加文件夹_files。但那只是我。

然而,PHPUnit有一个内置的模拟框架,因此通常你不需要硬编码你的存根和/或模拟。见

示例10.2:对方法调用进行存根以返回固定值

class StubTest extends PHPUnit_Framework_TestCase
{
    public function testStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this->getMock('SomeClass');

        // Configure the stub.
        $stub->expects($this->any())
             ->method('doSomething')
             ->will($this->returnValue('foo'));

        // Calling $stub->doSomething() will now return
        // 'foo'.
        $this->assertEquals('foo', $stub->doSomething());
    }
}

PHPUnit的Mocking框架的替代方案是Pádraic Brady's Mockery,其灵感来自Ruby的flexmock和Java的Mockito