PHPUnit Mock Objects and Static Methods

后端 未结 7 1462
梦谈多话
梦谈多话 2020-11-27 18:02

I am looking for the best way to go about testing the following static method (specifically using a Doctrine Model):

class Model_User extends Doctrine_Record         


        
7条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-27 19:00

    One more approach:

    class Experiment
    {
        public static function getVariant($userId, $experimentName) 
        {
            $experiment = self::loadExperimentJson($experimentName):
            return $userId % 10 > 5;  // some sort of bucketing
        } 
    
        protected static function loadExperimentJson($experimentName)
        {
            // ... do something
        }
    }
    

    In my ExperimentTest.php

    class ExperimentTest extends \Experiment
    {
        public static function loadExperimentJson($experimentName) 
        {
            return "{
                "name": "TestExperiment",
                "variants": ["a", "b"],
                ... etc
            }"
        }
    }
    

    And then I would use it like so:

    public function test_Experiment_getVariantForExperiment()
    {
        $variant = ExperimentTest::getVariant(123, 'blah');
        $this->assertEquals($variant, 'a');
    
        $variant = ExperimentTest::getVariant(124, 'blah');
        $this->assertEquals($variant, 'b');
    }
    

提交回复
热议问题