如何使用生成器完成现有phpunit测试

如何使用生成器完成现有phpunit测试,phpunit,generator,skeleton-code,Phpunit,Generator,Skeleton Code,PhpUnit有一个基于现有类的skel生成器 但它只起过一次作用 如果后来添加了一些新方法(因为dev不能与tdd一起工作),那么测试文件是不完整的 有没有工具可以为未覆盖的方法生成skel?我不知道,我也不认为有必要。骨架生成器为它找到的每个函数生成一个测试方法,但是您不能在一个测试函数中测试稍微高级的函数的所有用例 此外,还会生成测试函数的名称,但是可以而且应该创建更好的名称来描述预期的测试用例或测试函数的行为。比如“testGetQuoteFromStockMarket”和“testGe

PhpUnit有一个基于现有类的skel生成器

但它只起过一次作用

如果后来添加了一些新方法(因为dev不能与tdd一起工作),那么测试文件是不完整的


有没有工具可以为未覆盖的方法生成skel?

我不知道,我也不认为有必要。骨架生成器为它找到的每个函数生成一个测试方法,但是您不能在一个测试函数中测试稍微高级的函数的所有用例

此外,还会生成测试函数的名称,但是可以而且应该创建更好的名称来描述预期的测试用例或测试函数的行为。比如“testGetQuoteFromStockMarket”和“testGettingMicrosoftQuoteFromStockMarketShouldReturnQuoteObject”以及“TestGettingUmbrelallCorporationfromStockMarketshouldFaildWithException”

请注意,不能将异常的引发与不引发异常的情况结合起来进行测试


总而言之,根本没有创建“每个方法一个测试方法”的用例,如果您添加了新方法,您的任务就是手动添加适当数量的新测试-生成的代码覆盖率统计信息将告诉您您做得有多好,或者哪些功能未经测试。

AFAIK没有内置的phpunit功能来更新自动生成的测试代码;这是大多数代码生成器的典型特征

好消息是,每个函数都添加得非常干净和独立。因此,我要做的是将现有的单元测试文件重命名为*.old,重新生成一个新的测试文件,然后使用
meld
(或您选择的visualdiff工具)合并到新函数中


旁白:自动测试生成实际上只在新类开始时需要;每个函数只进行一次单元测试的想法更多的是为了产生好的覆盖率统计数据来取悦你的老板;从构建好的软件的角度来看,有些函数需要多次测试,有些函数(我想到的是getter和setter)实际上并不需要任何测试,有时多个函数最好由一个单元测试覆盖(再次想到getter和setter)。

想象一个类有一个方法foo(),我使用skel testFoo()运行generator并构建一个测试文件。后来我在同一个类中添加了一个方法条(),我只是想在与testFoo()相同的测试文件中运行生成器,其中添加(附加)skel testBar(),想象一下,该类有一个方法
foo()
。要完全测试此方法(因为它在与错误参数一起使用时会引发异常),必须创建两个测试函数:
testFooShouldWork()
fooshouldThroweException()
。如果以后向类中添加一个新方法
bar()
,那么最初应该向测试中添加一个测试方法(不需要骨架生成器),或者应该能够在编写代码后添加该简单测试方法。在这种情况下,生成器应该做什么:创建另一个函数
testFoo()
,因为前一个函数已重命名,然后您将其删除?是的,我同意。我的需要在2个案例中。未维护测试。很多类在没有测试的情况下添加了方法,所以我只想用缺少的方法的skel(标记为skipped)填充现有的测试,以便更好地了解TODO。在另一种情况下,我需要向类添加特性。我开始在类中写入/定义方法签名。b-运行生成器c-使用meld比较生成的现有类d-在现有e中添加新方法-填充测试f-编写代码以确保测试成功。我只想要b包括c&d@Moosh我想,作为
meld
的替代方法,您可以在git分支中运行生成器,该分支就是为此目的创建的,然后在该分支中自动合并。如果它破坏了您现有的测试,那么很容易返回。