创建 MyException 的模拟

Create a Mock of a MyException

这是我要测试的方法:

class a {
    public function method($args) {
        if($args == "xxx") {
            throw new MyException("Right Message");
        }
    }

问题是 Myexception.php 不可用,所以我应该创建一个 MyException 的模拟并重新定义异常,这是我的解决方案但不起作用。谢谢

/**
     * @expectedException InvalidArgumentException
     * @expectedExceptionMessage Right Message     
     */
     public function testSubscribeCommunity(){
        $MyException = $this->getMockBuilder('MyException')
                ->setMethods(array('__construct'))
                ->setConstructorArgs(array('Right Message'))
                ->disableOriginalConstructor()
                ->getMock();
        $MyException->method('__construct')
                ->will($this->throwException(new InvalidArgumentException));
        $objectToTest = new A();        
        $objectToTest->method(null,$args);
    }

当您模拟一个对象时,您会创建它的一个特殊实例,但不会使使用 "new" 创建的 class 的下一个实例成为模拟对象。所以在你的测试中抛出的异常是一个真正的 MyException 异常。