Como utilizar async/await no C# para código assíncrono
Guia Completo: Stubs e Mocks para Métodos Assíncronos
Imagine que você tenha um método que faz uma chamada a um serviço externo de forma assíncrona. Para garantir que seu teste de unidade
🧪 Testes de Unidade para Tratamento de Erros: Previna Falhas Futuras!Descubra como implementar testes de unidade focados em tratamento de erros, evitando surpresas em produção e garantindo sistemas confiáveis e robustos. seja confiável, você não quer depender de fatores externos, como tempo de resposta da rede ou disponibilidade de um serviço remoto. É nesse cenário que entram os mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. stubs, que simulam comportamentos e resultados para os métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance., permitindo-lhe testar apenas o fluxo lógico do seu código.
Neste tutorial, exploraremos:
- A diferença entre stubs e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. em métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance.. - Como criar um stub e verificar retornos em cenários
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. assíncronos (com Moq e NSubstitute). - Como validar comportamentos esperados (com Moq e NSubstitute) quando um método assíncrono
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. é chamado.
Conceitos Rápidos: Stubs e Mocks🔗
- Stub: Objeto que fornece respostas pré-determinadas a chamadas, não verificando se o código foi efetivamente chamado de maneira correta. É útil quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. você apenas precisa de um “falso” para retornar o que você precisa em um teste. - Mock
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro.: Objeto que, além de servir como stub, também verifica se métodos foram chamados de forma esperada (quantidade
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. de vezes, parâmetros corretos etc.).
Quando falamos de métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance., essas definições continuam as mesmas, mas com o adicional de que os métodos serão do tipo Task,
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho.Task ou similares. A biblioteca
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho.<T>
🎮 Projeto: Sistema de Gerenciamento de Biblioteca com OOP Puro!Descubra como desenvolver um sistema de biblioteca eficiente utilizando conceitos de Orientação a Objetos em C#. Mergulhe neste tutorial prático e desafiador! de teste precisa lidar com esse retorno e com a awaitabilidade do método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência..
Visão Geral do Moq e do NSubstitute🔗
Antes de partirmos para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o uso prático, abaixo está uma pequena tabela comparativa entre as duas bibliotecas:
| Característica | Moq | NSubstitute |
|---|---|---|
| Sintaxe de configuração (Setup) | Usa o método .Setup(...) para especificar comportamento e retorno | Usa o método .Returns(...) após a chamada esperada |
| Validação de chamadas (Verificação) | Usa .Verify(...) para garantir se o método foi chamado corretamente | Usa .Received(...) para validar as chamadas |
| Operações assíncronas | Permite o uso de métodos .ReturnsAsync(...) e verificações de await | Permite .Returns(...) apontando Task ou Task<T> |
Ambas as bibliotecas têm grande suporte para métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance.. A principal diferença está na forma de configurar e verificar as interações.
Exemplo de Interface a ser Testada🔗
Vamos supor que temos a seguinte interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas., que representa uma comunicação com algum serviço externo de dados:
public interface IDadosService
{
Task<string> ObterDadosAsync(int id);
}
Sua implementação real chamaria, por exemplo, uma API externa para buscar informações. Porém, para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! fins de teste, nós injetaremos um mock ou stub dessa interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. no nosso código de produção.
Criando Stubs e Mocks com Moq🔗
O Moq
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. é uma das bibliotecas mais populares para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! criação de mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. em C#. Acompanhe o exemplo:
Stub de Retorno Assíncrono
Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. precisamos apenas de um stub (um retorno pré-definido), podemos fazer o seguinte:
using Moq;
using System.Threading.Tasks;
using Xunit;
public class DadosServiceTests
{
[Fact]
public async Task Deve_Retornar_Dados_Fixos_Como_Stub()
{
// Arrange
var mockDadosService = new Mock<IDadosService>();
mockDadosService
.Setup(service => service.ObterDadosAsync(It.IsAny<int>()))
.ReturnsAsync("Dados Stub");
// Act
var resultado = await mockDadosService.Object.ObterDadosAsync(123);
// Assert
Assert.Equal("Dados Stub", resultado);
}
}
Pontos importantes:
.Setup(service => serviceindica que, para qualquer valor
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade..ObterDadosAsync(It.IsAny<int>()))
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. de id, nossa função
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. deve retornar a string
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. "Dados Stub"..ReturnsAsync(...)é utilizado especificamente para métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. que retornam Task.
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho.<T>
Mock com Verificação de Chamadas
Para verificar comportamentos (como quantas vezes um método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. foi chamado), usamos a funcionalidade de mock
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro.:
[Fact]
public async Task Deve_Verificar_Se_Metodo_Foi_Chamado()
{
// Arrange
var mockDadosService = new Mock<IDadosService>();
mockDadosService
.Setup(service => service.ObterDadosAsync(It.IsAny<int>()))
.ReturnsAsync("Retorno Qualquer");
// Act
await mockDadosService.Object.ObterDadosAsync(10);
await mockDadosService.Object.ObterDadosAsync(20);
// Assert
mockDadosService.Verify(
service => service.ObterDadosAsync(It.IsAny<int>()),
Times.Exactly(2)
);
}
.Verify(...)confirma que o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. ObterDadosAsyncfoi chamado exatamente duas vezes, independentemente dos parâmetros
🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. passados.
Criando Stubs e Mocks com NSubstitute🔗
O NSubstitute se diferencia pela sintaxe mais “natural”, aproximando-se do que seria uma chamada real de código.
Stub de Retorno Assíncrono
Para criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um stub com NSubstitute:
using NSubstitute;
using System.Threading.Tasks;
using Xunit;
public class DadosServiceNSubstituteTests
{
[Fact]
public async Task Deve_Retornar_Dados_Fixos_Com_Stub_NSubstitute()
{
// Arrange
var stubService = Substitute.For<IDadosService>();
stubService.ObterDadosAsync(Arg.Any<int>())
.Returns("Retorno Stub NSubstitute");
// Act
var resultado = await stubService.ObterDadosAsync(123);
// Assert
Assert.Equal("Retorno Stub NSubstitute", resultado);
}
}
Observe que a configuração
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. é feita diretamente após a chamada do método sendo “substituído”:
stubService.ObterDadosAsync(Arg.Any<int>()).Returns(...)
Mock com Verificação de Chamadas
Com o NSubstitute, para validar se o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. foi chamado, utilizamos o .Received(...) ou o .DidNotReceive(...).
[Fact]
public async Task Deve_Verificar_Chamada_Com_NSubstitute()
{
// Arrange
var mockService = Substitute.For<IDadosService>();
mockService.ObterDadosAsync(Arg.Any<int>())
.Returns("Retorno Mocado");
// Act
await mockService.ObterDadosAsync(50);
// Assert
mockService.Received(1).ObterDadosAsync(Arg.Is<int>(x => x == 50));
}
mockService.Received(1)indica que esperamos que o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. seja chamado exatamente uma vez com id = 50.
Recomendações para Testar Métodos Assíncronos🔗
- Esperar o Método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.: Sempre use awaitao chamar o método
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. que deseja testar, para garantir que as execuções assíncronas sejam concluídas antes de verificar o resultado. - Configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. de Timeout: Em cenários reais, considere adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. timeouts
Timeout e Retries: Estratégias de Resiliência com Async/AwaitAprenda a usar Timeout e Retries com async/await em C# para garantir operações assíncronas robustas e melhorar a resiliência da sua aplicação. para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! evitar testes que ficam presos caso algo não ocorra. - Focar na Responsabilidade do Teste: Se seu teste é para validar o fluxo de dados
gRPC e Async/Await: Desvendando APIs de Alta Performance em .NETAprenda como integrar gRPC com Async/Await no .NET para desenvolver APIs de alta performance, escaláveis e com comunicação eficiente. dentro do método, volte-se para as configurações de stub (retorno pré-definido). Se seu teste é para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! garantir que determinado comportamento ocorra (por exemplo, número de chamadas), utilize mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. com verificação
Como Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas..
Conclusão🔗
Criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. stubs para métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. é fundamental para garantir que seu código seja confiável e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. previsível durante a execução de testes de unidade
🧪 Testes de Unidade para Tratamento de Erros: Previna Falhas Futuras!Descubra como implementar testes de unidade focados em tratamento de erros, evitando surpresas em produção e garantindo sistemas confiáveis e robustos.. Tanto o Moq
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. quanto o NSubstitute oferecem ferramentas simples para configurar retornos assíncronos e verificar comportamentos. Com essas técnicas, você isola as dependências externas
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. e reconhece rapidamente se seu sistema está se comportando conforme o esperado - tudo sem precisar de chamadas reais a serviços ou recursos externos.
- Garantir maior clareza no debug de comportamentos assíncronos.
- Reduzir o acoplamento do seu sistema a recursos
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. externos. - Manter um ambiente de testes rápido e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. reprodutível, fundamental em projetos
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! de grande porte.
Agora que você domina a criação de stubs e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. mocks
🎭 Moq: Simule Dependências para Testes Isolados!Aprenda a dominar o Moq em C#: simule dependências e melhore seus testes unitários com exemplos práticos, dicas avançadas e estratégias para um código seguro. assíncronos, pode aplicar essas técnicas nos seus projetos
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! e escrever testes mais robustos e confiáveis.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do .NET sobre programação assíncrona, essencial para entender o comportamento de métodos assíncronos, que é a base para a criação de mocks e stubs mostrados neste tutorial: learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás