Используйте Moq, чтобы издеваться над Конструктором? - PullRequest
23 голосов
/ 04 июня 2010

У меня есть такой набор конструкторов:

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) { } 

Однако при тестировании / Mocking мне нужен объект без каких-либо параметров строки подключения. Как я могу это сделать - желательно в Мок?

Возможно ли это вообще?

Ответы [ 2 ]

31 голосов
/ 04 июня 2010
var myMockBOC = new Mock<BusinessObjectContext>(null, null);

Это передаст значения NULL для ваших двух параметров.

Другой подход заключается в создании внутреннего конструктора, предназначенного только для тестового использования, и использования InternalsVisibleTo, чтобы позволить вашей тестовой сборке использовать его. К сожалению, это имеет большой недостаток в том, что если вы подписываете свои сборки, Moq не может использовать конструктор . Это должно быть решено в версии 4.0 Moq.

18 голосов
/ 04 июня 2010

Звучит так, как будто у вас запах кода - конструктор выполняет слишком много работы . Статья содержит набор исправлений для таких сценариев. В основном ответом является только выполнение присваивания в конструкторах, а не выполнение бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...