NCrunch генерирует System.IO.DirectoryNotFoundException при выполнении File.ReadAllText

У меня проблема с NCrunch, когда я получаю следующее исключение при тестировании метода, который пытается получить доступ к файловой системе.

System.IO.DirectoryNotFoundException
Could not find a part of the path 'C:\Users\shawn\AppData\Local\NCrunch\23344\21\EmailAPI.Tests\bin\Debug\netcoreapp2.0\Emails\Templates\BaseEmail.html'

Это код в проекте EmailAPI, где метод, который я пытаюсь протестировать, выполняет вызов для получения содержимого html-файла. Этот код отлично работает при запуске API, но когда здесь проходит модульный тест, возникает это исключение.

public void SendEmail(){
    var template = System.IO.File.ReadAllText("Emails/Templates/BaseEmail.html")
}

Структура проекта EmailAPI:

-EmailAPI Project Root
   -Emails
      -Strategies
         -BaseEmailStrategy <--- Class and method under test
      -Templates
         -BaseEmail.html <--- File read from ReadAllText

-EmailAPI.Tests Project Root
   -Emails
      -Strategies
         -BaseEmailStrategyTests <-- Test class

Так что в тестируемом проекте, когда я делаю приведенный выше код, приложение, кажется, знает, что я ссылаюсь на этот файл из корня моего проекта. Когда проект модульного теста запускает код при вызове метода, он пытается найти путь к файлу из папки выходного бина сборки NCrunch. Кто-нибудь знает, как я могу заставить это работать?

Я провел некоторые исследования по использованию IHostingEnvironment и установке ContentRoot в корневой каталог проекта EmailAPI, но не уверен, как получить этот путь к каталогу относительно моего проекта EmailAPI.Tests. Я также изучил насмешку над файловой системой с помощью System.IO.Abstractions, но я стараюсь не передавать интерфейс файловой системы в конструктор (потому что я использую шаблон стратегии, который делает его немного грязным, и я хочу избежать изменений кода строго для целей тестирования.) Пока не повезло, хотя найти достойное решение.

0 ответов

Другие вопросы по тегам