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