Задать вопрос
Kamrit
@Kamrit
QA Engineer

Как можно мокнуть даный код?

Есть следущий код:
public class UploadBase
    {
        protected string userId;
        protected string containerName;
        protected int maxLengthFile;

        protected CloudBlobContainer container;
        protected static Logger logger = LogManager.GetLogger("UploadFile");

        private static string cacheControl = "public, max-age=7776000";

        public UploadBase(string containerName) : this(string.Empty, containerName)
        {
            maxLengthFile = 21504;
        }

        public UploadBase(string userId, string containerName)
        {
            if (string.IsNullOrEmpty(containerName))
                new ArgumentNullException(containerName);

            this.userId = userId;
            this.containerName = containerName;

            // Receiving Account storage 
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"].ToString());

            // Create Blob client 
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // To get conteiner reference 
            container = blobClient.GetContainerReference(this.containerName);

            if (!container.Exists())
            {
                container.CreateIfNotExists();
                container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
            }
        }

без мока кидает ерору про NullReferenceException на эту строку:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"].ToString());

подскажите как можно это обойти
  • Вопрос задан
  • 185 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Очевидно, что нужно изолировать ConfigurationManager, обернув его в "фасад" IConfiguration с соответствующими методами доступа, а его уже мокать.

interface IConfiguration
{
    string ConnectionString { get; }
}

class AppSettingsConfiguration: IConfiguration
{
    public string ConnectionString
    {
        get
        { 
            return ConfigurationManager.AppSettings["ConnectionString"];
        }
    }
}


var config = new Mock<IConfiguration>();
config.Setup(x => x.ConnectionString).Returns("test value");
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Ну или для ленивых и перестраховщиков
CloudStorageAccount storageAccount = CloudStorageAccount?.Parse(ConfigurationManager?.AppSettings["StorageConnectionString"].ToString());


-)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы