Как выполнить юнит-тест Azure функций в Visual Studio - PullRequest
0 голосов
/ 15 января 2020

Я использую Visual Studio для создания Azure функций. Я могу создавать, публиковать sh и запускать функции вручную. Если я установил и запустил проект Function для запуска, я запускаю хост. Как заставить Хост запускаться при использовании MSTest?

Я хочу написать тест, используя RestSharp, и вызывать функции во время тестов - способ работы реального приложения. Кажется, мне нужен способ получить MSTest для запуска Azure Function Host.

1 Ответ

0 голосов
/ 16 января 2020

Я надеялся найти подход, похожий на отладку Asp .Net / SOAP в старых версиях VS, где механизм MSTest запускает IIS Express и подключает VS к Asp. Net проекты. Поддерживается редактирование и продолжение.

На данный момент я разработал следующие подходы:

RestSharp Code:

    var url = $"http://localhost:7071/api";
    var functionKey = "this value is ignored by 'Azure Functions Core Tools' ";

    var client = new RestSharp.RestClient(url);
    var request = new RestSharp.RestRequest("GetConnectionString", RestSharp.Method.POST);
    request.AddHeader("x-functions-key", functionKey);

    var response = client.Execute<string>(request);
  • Опция 1:

Запустите второй экземпляр VS и запустите функции.

Обновление кода для отражения URL-путей, отображаемых с помощью Azure Функции Core Tools.

Редактирование и продолжение работ.

  • Вариант 2:

Добавить этот класс в проект UnitTest:

Присоединить к процессу c .exe для отладки функций

Редактирование и продолжение не работают.

   [TestClass]
    public class Initializer
    {
        static System.Diagnostics.Process process { get; set; }

        [AssemblyInitialize]
        public static void Initialize(TestContext context)
        {
            //process does not use the WorkingDirectory properly with %userprofile%
            var userprofile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
            var path = $@"{userprofile}\source\repos\mypro\...\myproj.Functions\bin\Debug\netcoreapp3.1";

            var startInfo = new ProcessStartInfo
            {
                FileName = @"cmd.exe",
                Arguments = @"/C ""%localappdata%\AzureFunctionsTools\Releases\3.2.0\cli_x64\func.exe host start --port 7071 --pause-on-error""",
                //RedirectStandardInput = true,
                //RedirectStandardOutput = true,
                //RedirectStandardError = true,
                //UseShellExecute = false,

                UseShellExecute = true,
                WorkingDirectory = path
            };

            process = new System.Diagnostics.Process()
            {
                StartInfo = startInfo

            };
            process.Start();

       //     Thread.Sleep(3000);

        }

    [AssemblyCleanup]
    public static void Cleanup()
    {
        process.CloseMainWindow();
    }
}
  • Опция 3:

Запуск fun c .exe процесса

Рабочая папка: ... \ source \ repos \ xxx \ xxx \ xxx.Functions \ bin \ Debug \ netcoreapp3.1 \

Командная строка:

"C:\Users\username\AppData\Local\AzureFunctionsTools\Releases\3.2.0\cli_x64\func.exe" host start --port 7071 --pause-on-error

Прикрепить к забаве c .exe Процесс.

Редактировать и продолжить не работает.

...