Спасибо.
Я раньше не пробовал NextInstance, потому что он не работает на интерфейсах, которые я не хотел менять.
Но я попробовал это, и оно работает - хотя я предполагал, что порядок установки WhenCalled (s) на самом деле не имеет значения, но определенно имеет значение. Если я сделаю WhenCalled после Swap, например, это не сработает. Это должно идти до обмена. (Для меня не имеет смысла быть честным - это должен быть один и тот же объект).
Однако последний пример (один из способов, который я пробовал) не работает для меня. Я подделываю, задаю для фальшивого ожидания, а затем для Синглтона устанавливаю ожидание возврата фальшивого экземпляра - но теперь он возвращает конкретный экземпляр!
Может ли это быть связано с тем, как называются конструкторы? Я помню, что видел что-то об этом ...
В качестве альтернативы я мог бы использовать своп, но я хотел иметь возможность настроить все эти вещи в TestSetup и внести незначительные изменения в ожидания в реальном тесте, но это не представляется возможным.