Pular para o conteúdo principal

Criação de Projetos de Teste C# pelo CLI

Para criar um projeto de testes usando o bUnit e MSTest, a melhor prática é instalar os templates do bUnit e usar a CLI do .NET. [1]

Execute os comandos abaixo na sua linha de comando:
# 1. Instale os templates do bUnit
dotnet new install bunit.template

# 2. Crie o projeto bUnit configurado para usar MSTest
dotnet new bunit-mstest -o SeuNomeDoProjeto.Tests

O bUnit possui suporte oficial a múltiplos frameworks de teste. Se você já tem um projeto de testes MSTest padrão criado do zero e quer apenas adicionar o bUnit nele, ou se prefere configurá-lo manualmente, o processo exige alguns passos essenciais: [2]

1. Instalar os pacotes NuGet necessários

Adicione o pacote do bUnit ao seu arquivo .csproj ou através do terminal: [3]
dotnet add package Bunit

2. Ajustar o SDK no arquivo de projeto (.csproj)

Para testar componentes Blazor (arquivos .razor), o SDK do projeto de testes precisa ser alterado de Microsoft.NET.Sdk para Microsoft.NET.Sdk.Razor. [4, 5]
Abra o seu arquivo .csproj e altere a primeira linha para ficar assim:
<Project Sdk="Microsoft.NET.Sdk.Razor">

3. Exemplo de como um teste fica

Após configurar, seus testes podem ser escritos em puro C# herdando a classe BunitTestContext: [6]
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Bunit;

[TestClass]
public class MeuComponenteTests : BunitTestContext
{
    [TestMethod]
    public void OComponenteDeveRenderizarCorretamente()
    {
        // Arrange: renderiza o componente
        var cut = Render<MeuComponente>();

        // Assert: verifica a marcação HTML gerada
        cut.MarkupMatches("<div>Componente Renderizado!</div>");
    }
}

Para saber mais sobre a estrutura de testes de componentes Blazor em isolamento e como simular serviços:
Testing Blazor Components with bUnit, YouTube · Microsoft Visual Studio · 2024 M01 18


Notei que nenhum modelo bunit-mstest foi encontrado.

Como criar um projeto BUnit que utilize mstest?

Isso acontece porque os modelos do bUnit mudaram. O comando antigo não funciona mais nas versões recentes.
Para criar o projeto usando MSTest, você deve criar um projeto MSTest comum. Depois, você adiciona o pacote do bUnit nele.
Siga os passos abaixo no seu terminal:

1. Criar o projeto de testes

Crie um projeto usando o modelo oficial do MSTest:
dotnet new mstest -o MeuProjetoDeTestes

2. Adicionar o pacote bUnit

Entre na pasta do projeto e adicione o pacote do bUnit:
cd MeuProjetoDeTestes
dotnet add package bunit

3. Mudar o SDK para Razor

Este passo é obrigatório para testar arquivos .razor.
  • Abra o arquivo MeuProjetoDeTestes.csproj em um editor de texto.
  • Mude a primeira linha de <Project Sdk="Microsoft.NET.Sdk"> para:
<Project Sdk="Microsoft.NET.Sdk.Razor">

Exemplo de Teste

Agora você já pode criar seus testes. Veja um exemplo de classe de teste usando MSTest e bUnit: [1]
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Bunit;

[TestClass]
public class ContadorTest : BunitTestContext
{
    [TestMethod]
    public void DeveIncrementarOContador()
    {
        // Organizar
        var cut = RenderComponent<Counter>();

        // Agir
        cut.Find("button").Click();

        // Verificar
        cut.Find("p").MarkupMatches("<p>Current count: 1</p>");
    }
}

Comentários

Postagens mais visitadas deste blog

UML e comunicação entre Componentes

(conteúdo gerado com I.A.) Antes de abordarmos o conceito de Componentes, vale a pena analisar como um programador iniciante costuma estruturar uma aplicação. Geralmente, a escolha é construir um monólito tradicional, agrupando todas as classes de domínio (como Categoria, Produto, Compra, Venda, Pagamento, etc.) em uma única pasta de Entidades. Da mesma forma, criam-se pacotes globais para Repositórios, Serviços e Controllers. O grande problema dessa abordagem é que ela gera um forte acoplamento entre as classes e as camadas do sistema. À medida que a aplicação cresce, isso desencadeia uma série de dificuldades: Manutenção e modelagem complexas: As responsabilidades se misturam. Rapidamente, o código passa a ter diversos trechos onde as classes assumem funções que não deveriam ter, tornando a evolução do sistema confusa. Escalabilidade ineficiente: Para escalar o backend, é necessário replicar a aplicação inteira e todo o banco de dados. Além de consumir mais recursos, isso traz o ri...

Quando escolher Flask ou Quart no Python

Atualmente , considerando o suporte assíncrono já presente no Flask, a escolha entre Flask e Quart para uma API Server depende de vários fatores técnicos. Vejamos alguns critérios: Fonte:  https://pt.stackoverflow.com/questions/51268/qual-a-diferen%C3%A7a-entre-comunica%C3%A7%C3%A3o-ass%C3%ADncrona-e-s%C3%ADncrona Suporte Assíncrono : Flask : O Flask oferece suporte assíncrono por meio de extensões de terceiros, como  flask[async] . No entanto, seu desempenho assíncrono é inferior aos frameworks nativamente assíncronos. Quart : O Quart é uma reimplantação do Flask baseada no padrão ASGI (Asynchronous Server Gateway Interface). Ele utiliza E/S assíncrona em todo o código e é mais adequado para bases de código predominantemente assíncronas. Desempenho : Flask : Como aplicação WSGI, o Flask usa um único worker para cada ciclo de solicitação/resposta. Quando uma solicitação chega a uma visualização assíncrona, o Flask inicia um loop de eventos em uma thread, executa a função da vi...

Metodo para criar relacionamento entre tabelas sem dar erro cíclico EFCore

Quando estamos modelando o banco de dados no Entity Framework Core (ou em qualquer outra ferramenta) é muito comum criarmos o erro cíclico. Este erro ocorre devido ao banco de dados não conseguir determinar onde o relacionamento termina, causando um erro de loop. Vejamos uma situação real onde foi gerado esse problema: Um Professor leciona em várias Turmas, Um Professor leciona uma ou mais Disciplinas, Um Professor leciona determinadas Disciplinas em determinadas Turmas, Uma Turma tem muitos Professores, Em todas as Turmas tem 9 Disciplinas. Em todas as turmas podem ter até 9 Professores. Só por essa descrição já é possível perceber que os relacionamentos podem ser complexos de entender. E tem-se também o problema da navegação em via dupla: Professor-Turmas, Turma-Professores. Então, como modelar essas tabelas sem que o banco entre em loop? Para resolver esse problema no Entity Framework Core e evitar o erro de "Multiple Cascade Paths" (caminhos múltiplos de cascata) comum n...