public function instantiate($strictMethods = true, $constructorArgs = [])
    {
        $originalClassFiltered = preg_replace('~[^a-z0-9]~i', '_', $this->originalClass);
        $className = 'mock_' . $originalClassFiltered . '_' . self::$mockCount;
        self::$mockCount++;
        eval($this->build($className));
        $reflectedClass = new ReflectionClass($className);

        if ($this->useRealConstructor) {
            $mock = $reflectedClass->newInstance($constructorArgs);
        } else {
            $mock = $reflectedClass->newInstanceWithoutConstructor();
        }

        $reflectionProperty = $reflectedClass->getProperty('__expectations');
        $reflectionProperty->setAccessible(true);
        $reflectionProperty->setValue($mock, new ExpectationSet($strictMethods ? $this->mockedMethods : null));

        static::$mocks[] = $mock;

        return $mock;
    }