Проверка статических ресурсов в веб-приложении - PullRequest
0 голосов
/ 26 июня 2019

Как и большинство веб-приложений, у меня есть статические ресурсы, которые должны быть частью развертывания, иначе пользователь получит ответ 404 от сервера. Я думал использовать модульное тестирование для проверки двух вещей: 1. ресурс существует, и 2. контент не был изменен. Я попробовал следующий код, но он ожидает (я думаю), что файлы существуют в проекте модульного теста.

Структура решения: WebApplicationProject - ... - публичный - файл.* - другой файл. * - web.config

WebApplicationProject.Tests - AssetTests.cs

Я все делаю неправильно, разве это не должно быть частью модульного теста и какой-то другой походки в процессе сборки CI (DevOps Azure), или я упускаю что-то супер очевидное? Я, вероятно, задаю неправильные вопросы и поступаю неправильно, потому что знаю, что я не первый, кто хочет сделать что-то подобное.

Я читал другие посты о тестировании с файлами, но все они используют тестовые файлы для передачи данных для ввода в некоторый метод, который использует файл, или некоторый процесс, который генерирует файл для сравнения. Я не хочу делать ни одну из этих вещей.

Я также поиграл с настройками, делающими файл встроенным ресурсом, и всегда развертывал его вместе с проектом, но проект модульного тестирования по-прежнему не может получить доступ к файлу так, как я это делаю.

[TestClass]
public class AssetTests
{
    [TestMethod]
    [DeploymentItem(@".\files\file.*")]
    public void AwardLetters()
    {
        string path = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "file.*");// gets the working path for the testing dll, no files exist here.
        Assert.IsTrue(File.Exists("file.*"), "FAIL: file {0} not found", "file.*");// nothing I have tried has access to the projects static resources
    }
}

Все результаты заканчиваются файлом, но пока не найдено исключение.

Я попытался загрузить ссылку вручную, используя: Assembly a = Assembly.LoadFrom ("WebApplicationProject"); // также используется WebApplicationProject.dll Это не может найти ссылку. Да, для локального экземпляра ссылочного свойства задано значение true.

Я открыт для всех предложений, но если вы предлагаете, чтобы у меня было две копии файлов, пожалуйста, полностью объясните, почему это желательно.

1 Ответ

0 голосов
/ 26 июня 2019

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

[TestMethod]
    public void FileExists()
    {
        Assembly a = Assembly.LoadFrom(@"..\..\..\WebApplicationProject\bin\WebApplicationProject.dll");
        string t = string.Join("", a.GetManifestResourceNames());
        Assert.IsTrue(t.Contains("file.*"));
    }

Теперь, когда у меня есть файл, я также могу создать тест для проверки содержимого файла и проверки его содержимого.

Я все еще думаю, что это утка, и она совсем не элегантна. Поэтому, пожалуйста, поделитесь своими ответами и критикой моего решения.

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