6
votes

Paramètre de sortie SQL moqueur

Je me suis moqué de quelques méthodes de ma couche d'accès aux données, mais dans certaines méthodes, la valeur d'un paramètre de sortie SQL est définie. Comment puis-je me moquer de cela?

Méthode: P>

using (mocks.Record())
        {
            Expect.Call(dal.ExecuteUsingStoredProcedure("",> null)).Return(true).IgnoreArguments().OutRef(1);
        }


1 commentaires

Essayez d'utiliser IDBParameter sur SQLParameter lorsque cela est possible, vous pouvez vous moquer du contenu de votre cœur.


3 Réponses :


0
votes

Je ne pense pas que vous puissiez vous moquer, car il s'agit d'un sqlparameter normal (classe de béton), et ce n'est pas un paramètre OUT / REF dans le sens .NET. Ce que j'essaierais, c'est simplement définir la valeur du paramètre dans l'appel moqué vers DAL (je n'ai pas vérifié la syntaxe, mais je suis sûr que vous obtenez l'idée):

using (mocks.Record())
        {
            Expect.Call(dal.ExecuteUsingStoredProcedure("",null)).Return(true).IgnoreArguments().Do(x => wrappedParameters[2].Value = 1; true);
        }


0 commentaires

2
votes

Je pense que vous allez à ce sujet dans ce mauvais sens. Votre interface DAL devrait ressembler à ceci:

[Test]
public void Login_shows_error_when_TryGetUser_returns_null()
{
    var userRepositoryStub = MockRepository.GenerateStub<IUserRepository>();
    var sessionStub = MockRepository.GenerateStub<ISession>();
    var loginScreenViewModel = 
        new LoginScreenViewModel(sessionStub, userRepositoryStub);

    loginScreenViewModel.UserName = "foo";
    loginScreenViewModel.Password = "bar";
    loginScreenViewModel.Login();

    Assert.AreEqual(loginScreenViewModel.Error, 
        "User 'foo' does not exist or password is incorrect"));
    userRepositoryStub.AssertWasCalled(x=>x.TryGetUser("foo","bar"));
    sessionStub.AssertWasNotCalled(x=>x.ShowMainScreen());
    Assert.IsNull(session.User);
}


0 commentaires

0
votes

J'ai couché ceci à l'aide de la méthode "quand formée".

Dans mon code (à tester), je crée d'abord la connexion et la commande et ajouter trois paramètres, le tiers est mon paramètre de sortie. J'appelle ensuite "ExecuTecommand" sur ceci ... Je ne vais pas passer par le code pour cela, car je pense qu'il est assez standard (ExecuTecommand prend l'objet de commande comme paramètre).

dans mon test, Je crée un talon pour mon service de données SQL et programmez-le de sorte que cela définit la valeur du paramètre: xxx

La réponse est probablement un peu en retard pour votre projet, mais j'espère que ceci aide quelqu'un ...

griff


0 commentaires