c# - utilizando - ¿Cómo probar la biblioteca de clases interna?
que es una biblioteca de clases c# (2)
En .NET puede usar InternalsVisibleToAttribute en su biblioteca de clase para hacer que sus tipos internos sean visibles para su proyecto de prueba de unidad.
De esa manera puede mantener su clase interna y aún así usarla desde otras asambleas a las que le da acceso.
Lo usas así:
[assembly:InternalsVisibleTo("NameOfYourUnitTestProject")]
Me gustaría escribir una biblioteca de clases que crea para mí un objeto complejo, pero solo debe exponerse lo menos posible. Quiero que se incluya en otros proyectos y allí solo tengo una llamada a esta biblioteca que, por ejemplo, me devuelve un objeto de una clase creada internamente. No quiero permitir que otros creen estos objetos explícitamente, pero igual quiero crear un proyecto de prueba para esta biblioteca de clase.
Por ejemplo:
var result = Manager.Instance.Create(definition)
Este debería ser el único acceso a la biblioteca de la clase.
En función del parámetro de definición, utiliza diferentes subclases para crear la instancia solicitada y establece sus propiedades en consecuencia. Por lo tanto, quiero asegurar de algún modo mediante pruebas que todo el proceso de creación funcionó bien. Pero dado que tampoco quiero exponer muy pocas propiedades internas del objeto resultado, no puedo probar utilizando solo este método de acceso público ya que no tengo ninguna propiedad para afirmar.
Sé que no deberías probar mecánicas internas y normalmente es un mal diseño y también estaba leyendo este artículo , pero ¿no hay alguna forma de crear un proyecto de prueba de biblioteca más unidad y quizás luego limitar el acceso a esta clase? ? con un envoltorio o algo?
Para los últimos proyectos formateados de csproj 2017, si su proyecto no tiene el archivo AssemblyInfo.cs
, puede agregar lo siguiente:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
También puede usar otras variables para reemplazar MSBuildProjectName
como AssemblyName
o usar el nombre del proyecto unittest directamente.
Puede verificar ProjectName.AssemblyInfo.cs
en la carpeta obj ( obj/Debug/netstandard2.0
) se ha actualizado agregando InternalsVisibleTo
.