AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79544061
Accepted
Gustavo Ruiz
Gustavo Ruiz
Asked: 2025-03-30 08:20:51 +0800 CST2025-03-30 08:20:51 +0800 CST 2025-03-30 08:20:51 +0800 CST

Problemas com projeto de teste/integração de unidade .NET 8

  • 772

Estou tendo problemas ao tentar fazer testes de unidade/integração com o .NET 8 em um projeto (pequena API que funciona). Eu queria adicionar testes a ele para aprender, já que nunca os fiz, mas estou me deparando com algo que não consigo resolver.

Estrutura raiz do meu projeto: Controladores, DTOs, Migrações, Modelos, Repositório, Serviços, mais arquivos e a pasta criada para testes (WebApi.Tests/)

Adicionei a pasta WebApi.Tests dentro do projeto principal (não sei se essa é a prática correta), mas quando executo, recebo erros como atributos duplicados e pacotes ausentes, como Xunit, FactAttribute, Fact.

Os pacotes são instalados:

/DotNetProjects/WebApi/WebApi.Tests$ dotnet list package --outdated

The following sources were used:
   https://api.nuget.org/v3/index.json

Project `WebApi.Tests` has the following updates to its packages
   [net8.0]: 
   Top-level Package                    Requested   Resolved   Latest 
   > coverlet.collector                 6.0.0       6.0.0      6.0.4  
   > Microsoft.NET.Test.Sdk             17.6.0      17.6.0     17.13.0
   > xunit                              2.6.3       2.6.3      2.9.3  
   > xunit.core                         2.6.3       2.6.3      2.9.3  
   > xunit.extensibility.core           2.6.3       2.6.3      2.9.3  
   > xunit.extensibility.execution      2.6.3       2.6.3      2.9.3  
   > xunit.runner.visualstudio          2.4.5       2.4.5      3.0.2

O mais estranho é que se eu executar meu projeto de teste sem a referência ao programa principal, consigo executar os testes sem problemas, porém quando adiciono a referência, recebo os erros: erros ao executar o teste dotnet:

DotNetProjects/WebApi/WebApi.Tests$ dotnet test 
  Determining projects to restore...
  All projects are up-to-date for restore.
/home/gustavo.ruiz/DotNetProjects/WebApi/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs(4,12): error CS0579: Duplicate 'global::System.Runtime.Versioning.TargetFrameworkAttribute' attribute [/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.csproj]
/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.Tests/GlobalUsings.cs(1,14): error CS0246: The type or namespace name 'Xunit' could not be found (are you missing a using directive or an assembly reference?) [/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.csproj]
/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.Tests/UnitTest1.cs(5,6): error CS0246: The type or namespace name 'FactAttribute' could not be found (are you missing a using directive or an assembly reference?) [/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.csproj]
/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.Tests/UnitTest1.cs(5,6): error CS0246: The type or namespace name 'Fact' could not be found (are you missing a using directive or an assembly reference?) [/home/gustavo.ruiz/DotNetProjects/WebApi/WebApi.csproj]

WebApi.csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
    <PackageReference Include="FluentValidation" Version="11.11.0" />
    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.11" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.tools" Version="8.0.3">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
  </ItemGroup>
  <!-- <ItemGroup>
    <Compile Include="Services.fs" />
  </ItemGroup> -->
</Project>

WebApi.Testes.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
    <PackageReference Include="xunit" Version="2.6.3" />
    <PackageReference Include="xunit.core" Version="2.6.3" />
    <PackageReference Include="xunit.extensibility.core" Version="2.6.3" />
    <PackageReference Include="xunit.extensibility.execution" Version="2.6.3" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="coverlet.collector" Version="6.0.0">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\WebApi.csproj" />
  </ItemGroup>

</Project>

como comentei ao remover o ProjectReference isso executa os testes sem nenhum problema (embora ele praticamente só tenha criado o projeto de teste e tenha um código de exemplo)

UnitTest1.cs:

namespace WebApi.Tests;

public class UnitTest1
{
    [Fact]
    public void Test1()
    {
        Assert.True(true);
    }
}

Coisas que tentei:

  • Exclua o projeto e recrie-o (dotnet new xunit -n WebApi.Tests -o WebApi.Tests)
  • Exclua os diretórios bin e obj e execute dotnet restore, dotnet clean, dotnet build
  • Reinstale os pacotes de teste

Gostaria de poder executar os testes sem erros

c#
  • 1 1 respostas
  • 55 Views

1 respostas

  • Voted
  1. Best Answer
    ayoub errazki
    2025-03-30T11:31:33+08:002025-03-30T11:31:33+08:00

    Você não deve colocar o projeto de teste dentro do projeto principal, você deve criar uma solução e então vincular o projeto principal "webapi" e o projeto de teste.

    na sua nova pasta crie o projeto de teste usando os comandos é mais estável eu diria:

    # dotnet new xunit -n "Webapi.Tests"

    seu projeto principal deve estar na mesma pasta

    Projeto Webapi
    |_ _ Webapi
    |_
    _ Webapi.Testes

    Observe que você deve criar uma solução e adicioná-las em uma única solução. Também não se esqueça de adicionar a referência do projeto principal dentro do projeto de teste.

    • 2

relate perguntas

  • Polly DecorrelatedJitterBackoffV2 - como calcular o tempo máximo necessário para concluir todas as novas tentativas?

  • Wpf. Role o DataGrid dentro do ScrollViewer

  • A pontuação que ganhei na página do jogo com .NET MAUI MVVM não é visível em outras páginas. Como posso manter os dados de pontuação no dispositivo local

  • Use a hierarquia TreeView com HierarchicalDataTemplate de dentro de um DataTemplate

  • Como posso melhorar essa interface de validação no .NET?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve