大佬教程收集整理的这篇文章主要介绍了php – 测试覆盖特征方法执行,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我有这样的代码:
use mockery; use phpUnit\Framework\TESTCase; class SampleTest extends TESTCase { /** @test */ public function it_runs_parent_method_alternative() { $class = mockery::mock(B::class)->makePartial(); $class->shouldReceive('fooX')->once(); $this->assertSame('bar',$class->foo()); } protected function tearDown() { mockery::close(); } } Trait X { function foo() { $this->something->complex3rdpartystuff(); } } Trait Y2 { function foo() { $this->fooX(); return 'bar'; } } class B { use Y2,X { Y2::foo insteadof X; X::foo as fooX; } }
它会工作正常,但我不希望代码组织这样.在类I的上面的代码中使用两个特征,但在代码中我想测试其实特征使用开头提到的其他特征.
但是当我有这样的代码时:
<?php use mockery; use phpUnit\Framework\TESTCase; class SampleTest extends TESTCase { /** @test */ public function it_runs_parent_method() { $class = mockery::mock(A::class)->makePartial(); $class->shouldReceive('fooX')->once(); $this->assertSame('bar',$class->foo()); } protected function tearDown() { mockery::close(); } } Trait X { function foo() { $this->something->complex3rdpartystuff(); } } Trait Y { use X { foo as fooX; } function foo() { $this->fooX(); return 'bar'; } } class A { use Y; }
我越来越:
检查下面的代码
use mockery; use phpUnit\Framework\TESTCase; class SampleTest extends TESTCase { /** @test */ public function it_runs_parent_method() { $mock = mockery::mock(A::class)->shouldAllowmockingProtectedMethods()->makePartial(); $mock->shouldReceive('proxyTraitCall')->once(); $this->assertSame('bar',$mock->foo()); } protected function tearDown() { mockery::close(); } } Trait X { function foo() { $this->something->complex3rdpartystuff(); } } Trait Y { use X { foo as fooX; } function foo() { $this->proxyTraitCall(); return 'bar'; } function proxyTraitCall() { return $this->fooX(); } }
如果你自动加载特性,你可以尝试使用mockery来overload.
/** @test */ public function it_runs_parent_method() { $Trait = mockery::mock("overload:" . X::class); $Trait->shouldReceive('foo')->once(); $class = mockery::mock(A::class)->makePartial(); $this->assertSame('bar',$class->foo()); }
Don’t test implementation details.测试它就像你使用它.
类用户必须只知道使用它的公共接口,为什么测试应该有所不同?
一个内部方法调用不同的事实是实现细节和测试这打破封装.如果有一天你会在不改变类行为的情况下从Trait切换到class方法,那么即使来自外部的类看起来相同,你也必须修改测试.
来自Dave Thomas和Andy Hunt的语用单元测试
以上是大佬教程为你收集整理的php – 测试覆盖特征方法执行全部内容,希望文章能够帮你解决php – 测试覆盖特征方法执行所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。