es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Microsoft Fakes shim para método genérico con clase anónima.

Estoy tratando de usar un shim ShimEnumerable.CountOf1IEnumerableOfM0, pero en mi método, el método de extensión se usa con un tipo anónimo como este:

elements
    .GroupBy(
        element => new
            {
                A = element.A,
                B = element.B,
            }
    )
    .Select(grouping => grouping.Count())

¿Cómo puedo hacer el shim del método Count?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para interceptar el método Count, deberás crear una intercepción para el método GroupBy, ya que este devuelve un objeto IEnumerable. Una vez que hayas creado la intercepción para GroupBy, podrás interceptar el método Count accediendo a la propiedad IEnumerable.Count. Para hacer esto, deberás utilizar la intercepción ShimEnumerable.CountOf1IEnumerableOfM0. A continuación, se muestra un ejemplo de cómo puedes interceptar el método GroupBy y la propiedad Count:

    using Microsoft.QualityTools.Testing.Fakes;
    using System.Linq.Fakes;
    
    using (ShimsContext.Create())
    {
        // Intercepción del método GroupBy
        ShimEnumerable.GroupByOf1IEnumerableOfM0KeyValuePairOfM0Int32 = (source, keySelector) =>
        {
            var groups = source.GroupBy(keySelector);
    
            return groups.Select(group => new KeyValuePair<m0, int="">(group.Key, group.Count()));
        };
    
        // Intercepción de la propiedad Count
        ShimEnumerable.CountOf1IEnumerableOfM0 = source =>
        {
            var enumerator = ((IEnumerable<m0>)source).GetEnumerator();
            var count = 0;
            while (enumerator.MoveNext())
            {
                count++;
            }
            return count;
        };
    
        // Llamar al método que se está probando
        var result = MyClass.MyMethod(elements);
    
        // Aquí van las aserciones
    }
    

    En el código anterior, estamos interceptando GroupBy para devolver una lista de pares clave-valor donde la clave es la clave de agrupación y el valor es el recuento de elementos en el grupo. Luego, estamos interceptando la propiedad Count para recorrer los elementos del enumerable y contarlos manualmente. Esto nos permite utilizar elements.Count() en nuestro método que se está probando, a la vez que nos permite controlar lo que devuelve en nuestra prueba unitaria.</m0,>

Comments are closed.