Я могу придумать несколько способов:
1) Вы можете создать отдельную сборку, как вы предложили, которая содержит все ваши фиктивные реализации. Вы также включили бы Реестр в эту сборку, который устанавливает фиктивные реализации в качестве значений по умолчанию. Реестр в вашей основной сборке должен будет выполнить сканирование, чтобы при необходимости загрузить макет сборки - что-то вроде:
Scan(x =>
{
x.TheCallingAssembly();
x.AssembliesFromApplicationBaseDirectory();
x.LookForRegistries();
});
2) Другой вариант - создать профиль для ваших макетов:
Profile("Test", x =>
{
x.For<IChargifyService>().Use<MockChargifyService>();
// etc.
});
Тогда где-то в вашем приложении вы бы назвали:
ObjectFactory.Profile = "Test";
в зависимости от условий окружающей среды, которые указывают, что вы находитесь в режиме тестирования.