Pregunta

El uso de NUnit y NMock2 yo no era capaz de comparar lo que yo pensaba que eran los mismos SqlParameters:

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

Me encontré con este problema, cuando se trata de probar una ejecución de un método que utiliza 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();
    }

He recibido este error:

  

NMock2.Internal.ExpectationException: invocación inesperada de sqlDao.ExecuteNonQuery ( "usp_Update_Comment",)   Esperado:     1 tiempo: sqlDao.ExecuteNonQuery (igual a "usp_Update_Comment", igual a <@ChangeId>) [denominadas 0 veces]

Preguntas:

  • ¿Cómo se prueba con NMock2 cuando Parámetro esperado es SqlParameter?
  • ¿Cómo se compara la igualdad de dos SqlParameters?
¿Fue útil?

Solución

Debido .equals () utiliza la implementación predeterminada de Iguales por lo que yo sé (lo que significa que una única SqlParameter será "igual" otra SqlParameter si son el mismo objeto), que tendrá que interrogar directamente las propiedades de se pasa el parámetro para asegurar los datos correctos.

La llamada Has.Property dentro .Con le permite comprobar las propiedades de un parámetro sin necesidad de que un parámetro es igual a algún otro valor. Pruebe lo siguiente:

Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
          .With("usp_Update_Comment", Has.Property("ParameterName").EqualTo("@Id") & 
                                      Has.Property("Value").EqualTo(1));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top