我尝试使用phpunit
进行一系列测试,并依赖于几个类。我有3个类,A,B和C,每个类都有测试。 A有5个测试,B 3测试和C 3测试。
B对A有依赖性测试,C对A有依赖性测试,A最终测试依赖于B和C测试。
class A extends TestCase {
public function test1(){}
// @depends test1
public function test2(){}
// @depends test2
public function test3(){}
// @depends test3
public function test4(){}
// @depends test3
// @depends B::test3
// @depends C::test3
public function test5(){}
}
class B extends TestCase {
// @depends A::test1
public function test1(){}
// @depends B::test1
public function test2(){}
// @depends B::test2
// @depends A::test4
public function test3(){}
}
class C extends TestCase {
// @depends A::test1
public function test1(){}
// @depends C::test1
public function test2(){}
// @depends C::test2
// @depends A::test4
public function test3(){}
}
我在这种情况下的问题是跳过A :: test5,B :: test3和C :: test3。
答案 0 :(得分:0)
你所拥有的是一个非常糟糕的测试设计。
您应该能够彼此独立地运行所有测试。
如果您需要预先设置某些数据,请使用setUp()
方法或测试方法本身进行设置。
正如已经指出的那样,如果你有外部依赖,那就嘲笑它们。
如果您有一组所有需要相同或类似数据的测试,那么将该设置代码放在基类中,然后使用您的测试扩展它是完全可以接受的。这样的事情。
class AppTestCase extends TestCase
{
public function setUp()
{
// this will be run before every test class that extends this class. So make your test user/product here.
// you can invoke all your mocking in here to if thats easier,
// just make sure the resulting mock objects are all in visible
// properties to be accessed elsewhere
}
public function tearDown()
{
// if youre functional testing, remove test data in here. This will fire after each test has finished in any class that extends this one.
}
}
class A extends AppTestCase
{
public function setUp()
{
parent::setUp();
// do other, class specific setup stuff here.
}
public function test1()
{
// your test data will be setup for you by the time you get here.
// if you only have 1 test and it needs adapted base data, do it here,
// if you have lots of tests in here, override and extend the `parent::setUp()` method.
}
}
然后为所有测试重复该模式。