创建一个必须配置的依赖项的对象

I am creating a client using GuzzleHttp 5.3. I want use the same Config object to configure the Guzzle Client. So, the creation of Guzzle Client depends of the object Config.

For example:

$config = new Config([
    'user' => 'github',
    'password' => '1234',
    'base_url' => 'http://test_or_production_url.com'
]);

new GithubClient($config, new \GuzzleHttp\Client());

And the constructor:

public function __construct(Config $config)
{
    $this->authData = [
        'uname'     => $config->getUser(),
        'upassword' => $config->getPassword(),
    ];

    $this->config       = $config;
    $this->httpClient   = new \GuzzleHttp\Client(['base_url' => $config->getBaseUrl());
    // I have to setup default headers, too.
}

But, I have to inject the Guzzle Client because I have to do unit tests.

One option is to inject a Guzzle Client configured as my client requires it. But the build process is a little cumbersome (set base_url, default header). The user must to know using Guzzle, I do not like this.

Other option is to create a new object (GithubClientFactory for example) to create my client.

$client = GithubClientFactory::make($config);

So, I hide the Guzzle dependency and the setup process. But the user always have to use the client factory.

Then, Is there a better (pattern) design to this problem?