Modificatore di accesso interno C# durante l'esecuzione di unit test

Modificatore di accesso interno C# durante l'esecuzione di unit test

Le classi interne devono essere testate ed è presente un attributo assembler:

using System.Runtime.CompilerServices;

[assembly:InternalsVisibleTo("MyTests")]

Aggiungilo al file di informazioni sul progetto, ad es. Properties\AssemblyInfo.cs .


Se vuoi testare metodi privati, dai un'occhiata a PrivateObject e PrivateType nel Microsoft.VisualStudio.TestTools.UnitTesting spazio dei nomi. Offrono wrapper facili da usare attorno al codice di riflessione necessario.

Documenti:tipo privato, oggetto privato

Per VS2017 e 2019, puoi trovarli scaricando il nuget MSTest.TestFramework


Aggiungendo alla risposta di Eric, puoi anche configurarlo nel csproj file:

<ItemGroup>
    <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
      <_Parameter1>MyTests</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

Oppure, se hai un progetto di prova per progetto da testare, puoi fare qualcosa di simile nel tuo Directory.Build.props file:

<ItemGroup>
    <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
      <_Parameter1>$(MSBuildProjectName).Test</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

Vedi:https://stackoverflow.com/a/49978185/1678053
Esempio:https://github.com/gldraphael/evlog/blob/master/Directory.Build.props#L5-L12