Domanda

Utilizzando NUnit e NMock2 non ero in grado di confrontare quello che ho pensato erano le stesse SqlParameters:

SqlParameter param1 = new SqlParameter("@Id", 1);
SqlParameter param2 = new SqlParameter("@Id", 1);
Assert.IsTrue(param1.Equals(param2));  // This failed

I imbattuti in questo problema, quando si cerca di verificare l'esecuzione di un metodo che utilizza NMock2

[Test]
    public void UpdateComments()
    {
        const int arbitraryId = 1;
        Comment comment = new Comment();

        SqlParameter idParam = new SqlParameter("@ChangeId", arbitraryId);

        Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
              .With("usp_Update_Comment", idParam);

        changeDao.UpdateComment(arbitraryId, comment);

        mocks.VerifyAllExpectationsHaveBeenMet();
    }

Ho ricevuto questo errore:

  

NMock2.Internal.ExpectationException: inaspettato invocazione sqlDao.ExecuteNonQuery ( "usp_Update_Comment",)   Previsto:     1 volta: sqlDao.ExecuteNonQuery (uguale a "usp_Update_Comment", uguale a <@ChangeId>) [0 volte chiamati]

Domande:

  • Come si fa a testare con NMock2 quando si Il parametro previsto è SqlParameter?
  • Come fai a confrontare l'uguaglianza di due SqlParameters?
È stato utile?

Soluzione

A causa .equals () sta utilizzando l'implementazione predefinita di Equals per quanto ne so (il che significa che uno SqlParameter sarà solo "uguale" un altro SqlParameter se sono lo stesso oggetto), si avrà bisogno di interrogare direttamente le proprietà di il parametro per garantire il corretto dati viene passato.

La chiamata Has.Property all'interno .Con permette di controllare le proprietà di un parametro senza richiedere che un parametro è uguale a un altro valore. Provare quanto segue:

Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
          .With("usp_Update_Comment", Has.Property("ParameterName").EqualTo("@Id") & 
                                      Has.Property("Value").EqualTo(1));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top