Тестирование хранилища BLOB-объектов Azure с использованием азурита - PullRequest
1 голос
/ 07 марта 2019

У меня есть библиотека C #, которая использует хранилище BLOB-объектов Azure.Для этого у меня есть интеграционный тест, в котором используется эмулятор хранилища больших двоичных объектов.После установки Azurite nuget пакета эмулятор blob.exe запускается немедленно, и мой тест проходит успешно.Однако я хочу, чтобы тест запускался и закрывался чисто так:

  • Запуск - запуск эмулятора хранилища больших двоичных объектов
  • Закрыть - Очистить временное хранилище и остановить эмулятор

У кого-нибудь есть для этого аккуратный узор?

1 Ответ

0 голосов
/ 25 марта 2019

Я получил следующее решение:

(a) В рамках установки dev загрузите азурит в известное место и установите переменную среды, указывающую на blob.exe:

InstallBlobExe.bat:

nuget restore packages.config -DirectDownload -PackagesDirectory "..\packages"

set BLOB_EXE="%CD%\..\packages\Azurite.2.6.5\tools\blob.exe"

packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="azurite" version="2.6.5" targetFramework="net471" />
</packages>

(b) В тестах используйте вспомогательный класс для запуска и остановки blob.exe.

using System;
using System.Diagnostics;
using System.IO;

namespace AltostratusEventsTests
{
    // /8719953/testirovanie-hranilischa-blob-obektov-azure-s-ispolzovaniem-azurita
    public class AzuriteBlobEmulator : IDisposable
    {
        private Process _blobProcess;

        public AzuriteBlobEmulator()
        {
            StartEmulator();
        }

        public void Dispose()
        {
            StopEmulator();
        }

        private void StartEmulator()
        {
            _blobProcess = new Process();
            _blobProcess.StartInfo.FileName = BlobDotExePath();
            _blobProcess.StartInfo.Arguments = BlobDotExeArgs();
            _blobProcess.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
            _blobProcess.Start();
        }

        private void StopEmulator()
        {
            try
            {
                _blobProcess.Kill();
                _blobProcess.WaitForExit();
            }
            catch
            {

            }
        }

        private string BlobDotExePath()
        {
            var blobPath = Environment.GetEnvironmentVariable("BLOB_EXE");
            if (string.IsNullOrEmpty(blobPath))
            {
                throw new NotSupportedException(@"

The BLOB_EXE environment variable must be set to the location of the azurite blob emulator.  
This can be done by running InstallBlobExe.bat

");
            }
            return blobPath;
        }

        private string BlobDotExeArgs()
        {
            return "-l " + Directory.GetCurrentDirectory();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...