Supongamos que tengo la siguiente entidad:que imita Guid.NewGuid()
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Guid UserGuid { get; set; }
public Guid ConfirmationGuid { get; set; }
}
Y el siguiente método de interfaz:
void CreateUser(string username);
parte de la implementación debe crear dos nuevos GUID: una para UserGuid
, y otro para ConfirmationGuid
. Deberían hacer esto estableciendo los valores en Guid.NewGuid()
.
ya he abstraído Guid.NewGuid() usando una interfaz:
public interface IGuidService
{
Guid NewGuid();
}
, así que puede burlarse fácilmente esto cuando sólo se necesita un nuevo GUID. Pero no estoy seguro de cómo simular dos llamadas diferentes al mismo método, desde un solo método, de modo que devuelvan valores diferentes.
Pero, ¿no supondría que estoy configurando las propiedades en la implementación en una secuencia determinada? ¿No está nublando las preocupaciones de mi prueba? En otras palabras, estos campos se pueden establecer en cualquier orden, y si por algún motivo modifico esta orden sin actualizar mis pruebas, lo ideal es que mis pruebas pasen. –
Bueno ... te estás metiendo un poco en las pruebas estatales vs. de comportamiento. No estoy seguro de cómo responder la pregunta sin asumir el conocimiento sobre el orden de las llamadas. –
Si entiendo correctamente, no desea tener 'Assert.AreEqual (guid1, user.UserGuid); Assert.AreEqual (guid2, user.ConfirmationGuid); 'falla si cambia el orden de asignación. En su lugar, debe usar algún tipo de afirmación de colección que sea independiente del orden (disponible en nunit y mstest): 'CollectionAssert.AreEquivalent (new [] {guid1, guid2}, new [] {user.UserGuid, user.ConfirmationGuid}) ; ' –