我正在使用 php 来测试我的代码。这是一个例子:
/**
* @covers Calculator::
*/
class CalculatorTest extends PHPUnit_Framework_TestCase {
protected function setUp() { /* ... */ }
/**
* @covers Calculator::add
*/
public function testAddTwoIntegers() { /* ... */ }
/**
* @covers Calculator::multiply
*/
public function testMultiplyTwoIntegers() { /* ... */ }
}
但是,我的代码很复杂,我想摆脱 @covers 而不是单独的测试方法。 php在生成覆盖率报告时如何处理以下类:
/**
* @covers Calculator
*/
class CalculatorTest extends PHPUnit_Framework_TestCase {
protected function setUp() { /* ... */ }
public function testAddTwoIntegers() { /* ... */ }
public function testMultiplyTwoIntegers() { /* ... */ }
}
请注意,类上的 @covers 注释仍然存在,但我已将其从每个方法中删除。
我也可以使用这种方法获得覆盖率报告,但我在任何地方都没有看到它的例子,所以我想知道这是否不正确。
Code Coverage Report:
2016-01-18 08:57:50
Summary:
Classes: 17.67% (56/317)
Methods: 0.33% (5/1520)
Lines: 0.60% (109/18094)
Class1:
Methods: 66.67% ( 2/ 3) Lines: 95.45% ( 21/ 22)
Class2:
Methods: 50.00% ( 3/ 6) Lines: 96.70% ( 88/ 91)
最佳答案
确实,建议设置类名而不设置方法名 @covers
句法。
此处的文档:
https://phpunit.readthedocs.io/en/8.5/annotations.html#covers
Annotation
@covers ClassName::methodName (not recommended)
@covers ClassName (recommended)
@covers ClassName<extended> (not recommended)
@covers ClassName::<public> (not recommended)
@covers ClassName::<protected> (not recommended)
@covers ClassName::<private> (not recommended)
@covers ClassName::<!public> (not recommended)
@covers ClassName::<!protected> (not recommended)
@covers ClassName::<!private> (not recommended)
@covers ::functionName (recommended)
当你问:
How does php treat the following class when generating coverage reports
答案是:
@covers
中提到的类的每一行在该 TestCase 中的“任何”测试期间执行将在执行中计算 +1。如果你做真正的 TDD 并开始 第一个 通过编写测试,然后 编写类,这是一个完美的方法。带有分支的公共(public)方法中的某些行将计算 2 次或更多执行,并且每个分支内的行可能会计算 1 次执行。
私有(private)方法也将计算 +n 次执行,虽然您不会为这些方法编写命名测试,但它们将作为公共(public)方法的助手而被调用。
当你说:
but I have not seen an example of it anywhere
我可以说我们 90% 的测试使用
@covers MyNiceClass
注释而不指定任何方法。如果你先从测试开始,你通常不会把事情搞砸。如果你“需要”“MyNiceClass”能够得到一些东西,你可以从做
testGetSomething()
开始。在测试中设置一个基本期望,然后你写public function getSomething()
在类里面,你最终会在 80% 的情况下对每种方法进行一对一的测试。其余情况通常是对同一方法的多次测试,例如 testGetSomething()
(幸福的道路)和testGetSomethingThrowsExceptionWithInvalidParameter()
(悲伤的路径)。简而言之
是的,您的建议是正确的、正常的、通常的,这是根据文档推荐的方法。
关于php - 对类使用 @covers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854482/