MachineSpecs Unité Test Dapper

c# dapper

Question

Donc, comme Dapper utilise des méthodes d’extension, j’ai terminé les fonctions dont j’avais besoin pour pouvoir les extraire:

public interface IDapperWrapper
{
    Task<IEnumerable<dynamic>> ExecuteQuery(string needArg, string sql, DynamicParameters parameterDictionary, CommandType commandType);
}

J'ai passé dans les DynamicParameters , ce qui signifie que mon code les crée, puis passe à DapperWrapper :)

Donc, mon fichier de Specs ressemble à quelque chose comme:

public class MyUnitTest : WithSubject<ClassCallingDapperWrapper>
{
    protected static DynamicParameters DynamicParameters;

    private Establish context = () =>
    {
      The<IDapperWrapper>()
        .WhenToldTo(
            x =>
            x.ExecuteQuery(
                Param.IsAny<string>(),
                Param.IsAny<string>(),
                Param.IsAny<DynamicParameters>(),
                Param.IsAny<CommandType>()))
        .Return(
            (string org, string sql, DynamicParameters dynParm, CommandType cmdType) =>
            {
                DynamicParameters = dynParm;

                return Task.FromResult(response);
            });
    }

    private It should_call_dapper_with_correct_params = () =>
    {
      DynamicParameters dynParams = new DynamicParameters();
      dynParams.Add("@param1", "123");

      The<IDapperWrapper>().WasToldTo(x => x.ExecuteQuery(
              NeededArg,
              sql,
              Params.Any<DynamicParameters>(),
              CommandType.StoredProcedure));
    };

    // Here I want to check that the DynamicParameters static field has the same parameters as the one I passed through.
}

Alors, comment puis-je accomplir cette dernière ligne? J'ai essayé dynParams.Get<string>("param1") , mais j'ai lu un autre message disant que vous devez d'abord lire.

Je l'ai fait en encapsulant les DynamicParamters dans la classe DapperWrapper et en passant par un Dictionary<string, object> , mais non seulement cela augmente le code. Il augmente également la quantité de code non testable dans DapperWrapper ce qui n'est pas idéal.

Ignorez le fait que cette spécification ne fonctionnera pas - elle a été volontairement réduite

Réponse populaire

Je t'entends. Je suis confronté aux mêmes problèmes et je dois soit abandonner l'utilisation de DynamicParameters (utiliser IEnumerable>), soit faire ce que vous avez fait. Même dans les tests unitaires avec des simulacres, je dois faire une sorte de rappel pour capturer l'argument. J'ai soumis une demande à l'équipe Dapper pour autoriser l'accès à l'objet dictionnaire privé de paramètres, ou fournir une méthode supplémentaire pour nous permettre d'afficher les noms et les valeurs des paramètres d'entrée.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi