De um ponto de vista pragmático, recomendo usar o que funciona melhor, com o menor esforço de manutenção.
Nesta situação específica, eu provavelmente usaria a "opção 3": separe a parte que lê a string de conexão da parte que cria a conexão real em dois métodos diferentes. Portanto, a string de conexão se torna um parâmetro de entrada do método 2 e, no seu código de teste, você pode omitir a avaliação de configuração e fornecer a string de conexão de teste como desejar, por exemplo, como parte dos dados de teste codificados. Como resultado, você não precisa nem de um arquivo de configuração de teste nem de um ISqlConnectionCreator
.