У меня есть такая группа Конструкторов:
public BusinessObjectContext()
: this(CloudStorageAccount.FromConfigurationSetting("DataConnectionString").TableEndpoint.ToString(),
CloudStorageAccount.FromConfigurationSetting("DataConnectionString").Credentials) {}
public BusinessObjectContext(string dataConnectionString)
: this(CloudStorageAccount.Parse(dataConnectionString).TableEndpoint.ToString(),
CloudStorageAccount.Parse(dataConnectionString).Credentials) { }
public BusinessObjectContext(String baseAddress, StorageCredentials credentials)
: base(baseAddress, credentials) { }
Однако при тестировании / Насмешка мне нужен объект без любого из параметров строки подключения. Как я могу сделать это - предпочтительно в Moq?
Действительно ли это возможно вообще?
Похоже, что у вас есть запах кода - конструктор выполняет слишком много работы. В статье приведен набор исправлений для таких сценариев. В основном ответ заключается в том, чтобы только выполнять присваивание в конструкторах, а не выполнять бизнес-логику.
var myMockBOC = new Mock<BusinessObjectContext>(null, null);
Это передаст значения NULL для ваших двух параметров.
Другой подход - создать внутренний конструктор, предназначенный только для использования в тестах, и использовать InternalsVisibleTo
, чтобы ваша тестовая сборка могла его использовать. К сожалению, у этого есть большой недостаток: если вы подписываете свои сборки, Moq не сможет использовать конструктор . Однако предполагается, что это будет решено в версии 4.0 Moq.