0
votes

Comment se moquer de l'expression Linq en C #

J'écris le test de l'unité de l'expression LINQ à l'aide de MOQ

My Linq Expression Obtention de la liste des employés basée sur une condition comme EmployéId et Active Record. P>

Ceci est mon expression LINQ P>

mockrepo.Setup(x => 
  x.Get(
    It.IsAny<Expression<Func<Employee, bool>>>(), 
    It.IsAny<Func<IQueryable<Employee>, 
    IOrderedQueryable<Employee>>>(), 
    It.IsAny<string>()
    )
).Returns(employeeList.AsQueryable());


2 commentaires

Pourquoi tu as besoin de se moquer de ça.


Nous écrivons des tests d'unité pour des méthodes, pas une déclaration dans une méthode.


3 Réponses :


0
votes

MOQ ne prend pas en charge avec la fonction d'expression, alors voici la meilleure solution. Utilisez ce package Nuget MOQ.EXPRESSION

// import namespace
using MoqExpression;

// you should do like this it will work
mockrepo.Setup(x => x.SearchFor(MoqHelper.IsExpression<Employee>(s => s.Name.Equals("Test")))).Returns(employeeList.AsQueryable());


0 commentaires

0
votes

Vous avez plusieurs options:

  1. Utilisez une mémoire en mémoire (si l'on utilise un enregistrement actif) ou une collecte en mémoire d'objets.
  2. Exposez la classe d'enregistrement active en tant qu'interface d'enregistrement actif, des méthodes d'interface simulées et une interface moquée de l'alimentation en classe où elle est utilisée.

    Les expressions habituellement ne sont jamais moquées, car elles font partie de la logique commerciale. Les recommandations de moqueur sont principalement basées sur l'architecture des applications.


0 commentaires

0
votes

Je recommanderais un peu de refonte, si cela est possible: vous devez supprimer votre paramètre de prédicat pour obtenir, car, comme vous retournez un iquérisable, on est capable de définir des conditions telles que "uniquement obtenir des enregistrements actifs" plus tard.

au lieu de xxx

Votre code deviendrait xxx

Il est maintenant plus facile de se moquer de get () comme Vous avez juste besoin de retourner l'emploi d'emploi.Asquérable ().


0 commentaires