> -----Original Message-----
> From: talk-boun...@lists.nyphp.org [mailto:talk-boun...@lists.nyphp.org] On 
> Behalf Of Gary A. Mort
> Sent: Friday, November 15, 2013 6:23 PM
> To: talk@lists.nyphp.org
> Subject: Re: [nyphp-talk] Why do unit tests not inherit?
> 
> On 11/15/2013 10:58 AM, Robert Stoll wrote:
> > I even think it is ok to have some degree of code duplication in test
> > classes just to make the test case very obvious. Each test case should
> > ideally just cover one aspect (method) and if you start having a lot
> > of test cases for just one method, then you should probably refactor
> > your method.
> 
> One test per method would be a good reason to avoid inheritance. Most open 
> source projects that I've reviewed that
have
> unit tests have one test per class, not per method.
> 
> With one test per class, I find that in real code there is a LOT of code 
> duplication when it comes to child classes. A
> moderately complex hiearchy of classes, with many children coming from one 
> parent, session handling is a good example
> where you may end up with different sessions for many different backends - 
> memcache, file, mysql, mongo, etc.
> 
I am not sure if we talk about the same. Just to avoid misunderstands I am 
going to outline a little bit more what I
meant. I did not mean that each method of a class has to have its one test 
class. But each method of a class A should
have an own test method in the test class T. And if the method of class A has 
branches, let's say one if-statement, then
the ideal case would be that you create two test methods in C which covers both 
cases. Once for the case that the
if-condition evaluates to true and once to false.
For example:

class A{
    private $_isActive=false;
    function isActive(){
        return $this->_isActive;
    }
    function foo(){
        $this->_isActive=true;
    }

    function bar(){
        if($isActive){
            doesThis();
        } else{
            doesThat();
        }
    }
}

class T extends SomeTestFramework{
    public function testFoo_Standard_IsActiveSetToTrue (){
        // arrange
        // act
        // assert
    }
    public function testBar_IsActiveIsTrue_DoesThis(){}
    public function testBar_IsActiveIsFalse_DoesThat(){}
}

Cheers,
Robert

_______________________________________________
New York PHP User Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

http://www.nyphp.org/show-participation

Reply via email to