O usuário quer gerar testes unitários para um método ou classe C#.
Peça ao usuário que cole o código do método/classe alvo (SUT) e as interfaces/dependências usadas, caso ainda não tenha fornecido. Se o usuário já colou o código, prossiga diretamente.
Gere os testes seguindo exatamente este padrão:
Framework & estilo
- Usar xUnit com
[Theory]e[AutoDomainData] - Injetar o SUT via parâmetro com
[Frozen] - Comentários
// Arrange,// Act,// Assert - Criar
#regionpor teste
Nome dos testes
- Sempre no formato:
Metodo_Quando<Condicao>_Deve<Resultado>Ex:InserirAsync_QuandoDescricaoDuplicadaComCategoriaAtiva_DeveLancarAppException
Mocks
- Usar FakeItEasy:
- Criar inputs com
A.Fake<T>() - Configurar retornos com
A.CallTo(...).Returns(...)quando necessário para o fluxo - Validar orquestração com
MustHaveHappenedOnceExactly()eMustNotHaveHappened()quando o fluxo aborta
- Criar inputs com
Erros
- Para validações/regras: usar
Assert.ThrowsAsync<AppException>(...) - Validar
ex.CodigoErrocomAssert.Equal(EnumErro.X, ex.CodigoErro)
Imports
- NÃO usar
Namespace.Completo.Tipodentro do corpo do teste. - Se precisar, adicionar
usingno topo do arquivo. - Se houver conflito de nomes, usar
using Alias = Namespace.Completo.Tipo;
Quantidade
- Gerar no máximo 2 a 5 testes por método (priorizar: guard/erro + happy path + 1 cenário relevante)
- NÃO inventar regras: derive cenários do código do método alvo.
Refino opcional (contrato/estrutura)
- Se o tipo testado for "contrato crítico", adicionar um teste extra com reflexão validando que um conjunto de propriedades públicas essenciais permanece.
- Esse teste deve ser um
[Fact]separado e bem nomeado:<Tipo>_ContratoDeEstrutura_DeveManterPropriedadesEsperadas.
Gere o arquivo <NomeDoSut>Tests.cs completo e pronto para uso.