События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание
Это не последняя версия этой статьи. В текущем выпуске см. версию этой статьи .NET 9.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см. статью версии .NET 9.
Важно!
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Для текущего выпуска см. версию этой статьи .NET 9.
Тестирование компонентов Razor — важный аспект создания стабильных и поддерживаемых приложений Blazor.
Для тестирования компонента Razor используется тестируемый компонент (CUT):
onclick
для нажатия кнопки.Два распространенных метода тестирования компонентов Razor — сквозное тестирование (E2E) и модульное тестирование.
Модульное тестирование: модульные тесты записываются с помощью библиотеки модульного тестирования, которая предоставляет:
bUnit — это пример библиотеки, позволяющей выполнять модульное тестирование компонентовRazor.
Тестирование E2E: средство выполнения тестов запускает приложение Blazor, содержащее CUT, и автоматизирует экземпляр браузера. Средство тестирования проверяет CUT и взаимодействует с ним через браузер. Playwright для .NET — это пример платформы тестирования E2E, которую можно использовать с приложениями Blazor.
В модульном тестировании участвует только компонент Razor (Razor/C#). Внешние зависимости, такие как службы и взаимодействие программ JS, должны быть замещены модулями для имитации. При тестировании E2E проверяются компонент Razor и вся его вспомогательная инфраструктура, включая CSS, JS и API модели DOM и браузера.
Область тестирования описывает, насколько обширны тесты. Область тестирования обычно влияет на скорость тестов. Модульные тесты запускаются на подмножестве подсистем приложения и обычно выполняются в течение миллисекунд. Тесты E2E, которые проверяют обширную группу подсистем приложения, могут выполняться несколько секунд.
Модульное тестирование также предоставляет доступ к экземпляру CUT, позволяя просматривать и проверять внутреннее состояние компонента. При тестировании E2E обычно это невозможно.
В зависимости от среды компонента тесты E2E должны проверять, что ожидаемое состояние среды достигнуто до начала проверки. В противном случае результат будет непредсказуемым. В модульном тестировании отрисовка CUT и жизненный цикл теста более интегрированы, что повышает стабильность тестирования.
Тестирование E2E включает в себя запуск нескольких процессов, сетевые и дисковые операции ввода-вывода и другие действия подсистем, которые часто приводят к плохой надежности тестов. Модульные тесты обычно изолированы от подобных проблем.
В следующей таблице приведены различия между этими двумя методами тестирования.
Возможность | Модульное тестирование | Тестирование E2E |
---|---|---|
Область тестирования | Только компонент Razor (Razor/C#) | Компонент Razor (Razor/C#) с CSS/JS |
Время выполнения теста | Миллисекунды | секунды |
Доступ к экземпляру компонента | Да | Нет |
Чувствительность к среде | Нет | Да |
Надежность | Более надежное | Менее надежное |
Рассмотрим сценарий, когда требуется выбрать тип выполняемого тестирования. Некоторые аспекты описаны в следующей таблице.
Сценарий | Рекомендованный метод | Замечания |
---|---|---|
Компонент без логики взаимодействия JS | Модульное тестирование | Если в компоненте JS отсутствует зависимость от взаимодействия Razor, его можно тестировать без доступа к JS или API модели DOM. В этом сценарии выбор модульного тестирования не имеет никаких недостатков. |
Компонент с простой логикой взаимодействия JS | Модульное тестирование | Чаще всего компоненты запрашивают модель DOM или запускают анимацию с помощью взаимодействия JS. Как правило, в этом сценарии предпочтительным является модульное тестирование, так как довольно просто макетировать взаимодействие JSчерез интерфейс IJSRuntime. |
Компонент, зависящий от сложного кода JS | Модульное тестирование и раздельное тестирование JS | Если компонент использует взаимодействие JS для вызова большой или сложной библиотеки JS, но само взаимодействие между компонентом Razor и библиотекой JS является простым, то, вероятно, лучше всего будет рассматривать компонент и библиотеку JS или код как две отдельные части и тестировать каждую часть индивидуально. Протестируйте компонент Razor с библиотекой модульного тестирования, а библиотеку JS — с библиотекой тестирования JS. |
Компонент с логикой, зависящей от действий JS с моделью DOM браузера | Тестирование E2E | Если функциональность компонента зависит от JS и его действий с моделью DOM, проверяйте код JS и Blazor вместе в тесте E2E. Этот подход разработчики платформы Blazor применили к логике Blazor для отрисовки в браузере, которая использует тесно связанный код на C# и JS. Код C# и JS должны работать совместно для правильного отображения компонентов Razor в браузере. |
Компонент, который зависит от сторонней библиотеки классов со сложными для макетирования зависимостями | Тестирование E2E | Если возможности компонента зависят от сторонней библиотеки классов со сложными для макетирования зависимостями, такими как взаимодействие JS, тестирование E2E может быть единственным вариантом проверить компонент. |
Для Blazor отсутствует официальная платформа тестирования Майкрософт, но поддерживаемый сообществом проект bUnit предоставляет удобный способ модульного тестирования компонентов Razor.
Примечание
bUnit — это сторонняя библиотека тестирования, которая не поддерживается или не обслуживается корпорацией Майкрософт.
bUnit работает с платформами тестирования общего назначения, такими как MSTest, NUnit и xUnit. На этих платформах тестирования тесты bUnit выглядят так же, как обычные модульные тесты. Тесты bUnit, интегрированные с платформой тестирования общего назначения, обычно выполняются с помощью:
dotnet test
CLI в командной строке.Примечание
Концепции тестирования и реализации тестов в разных платформах тестирования похожи, но не идентичны. Инструкции см. в документации платформы тестирования.
Ниже показана структура теста bUnit для компонента Counter
в приложении на основе шаблона проекта Blazor. Компонент Counter
отображает счетчик и увеличивает его значение при нажатии пользователем кнопки на странице.
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Следующий тест bUnit проверяет правильность увеличения счетчика CUT при нажатии кнопки.
@code {
[Fact]
public void CounterShouldIncrementWhenClicked()
{
// Arrange
using var ctx = new TestContext();
var cut = ctx.Render(@<Counter />);
var paraElm = cut.Find("p");
// Act
cut.Find("button").Click();
// Assert
var paraElmText = paraElm.TextContent;
paraElm.MarkupMatches("Current count: 1");
}
}
Тесты также можно записать в файл класса C#:
public class CounterTests
{
[Fact]
public void CounterShouldIncrementWhenClicked()
{
// Arrange
using var ctx = new TestContext();
var cut = ctx.RenderComponent<Counter>();
var paraElm = cut.Find("p");
// Act
cut.Find("button").Click();
// Assert
var paraElmText = paraElm.TextContent;
paraElmText.MarkupMatches("Current count: 1");
}
}
На каждом шаге теста выполняются следующие действия.
Упорядочить: компонент Counter
визуализируется с помощью TestContext
bUnit. Элемент абзаца CUT (<p>
) обнаружен и назначен paraElm
. В синтаксисе Razor компонент может быть передан как RenderFragment для bUnit.
Act: элемент кнопки <button>
находится и выбирается путем вызова Click
, который должен увеличивать счетчик и обновлять содержимое тега абзаца <p>
. Текстовое содержимое элемента абзаца извлекается путем вызова TextContent
.
Assert. Для текстового содержимого вызывается метод MarkupMatches
, который проверяет его соответствие ожидаемой строке Current count: 1
.
Примечание
Метод MarkupMatches
assert отличается от обычного утверждения сравнения строк (например, Assert.Equal("Current count: 1", paraElmText);
).
MarkupMatches
выполняет семантические сравнения входных данных и ожидаемой разметки HTML. Семантическое сравнение учитывает семантику HTML. Это означает, что такие детали, как незначащие пробелы, игнорируются. Это приводит к повышению стабильности тестов. Дополнительные сведения см. в разделе Настройка семантического сравнения HTML.
Отзыв о ASP.NET Core
ASP.NET Core — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!