c# - Llamada no válida, la última llamada se ha utilizado o no se ha realizado ninguna llamada
visual-studio visual-studio-2008 (5)
Creo que tienes que hacer MockRepository.ReplyAll () después de configurar todas las expectativas y antes de comenzar a usar este simulacro. Así que mi conjetura en su caso es que tiene que mover la línea Expect.Call before mediator = new AddAddressMediator (form); y pegar la respuesta después de eso:
[TestInitialize()]
public void MyTestInitialize()
{
form = MockRepository.GenerateMock<IAddAddressForm>();
// Make the properties work like a normal property
Expect.Call(form.OKButtonEnabled).PropertyBehavior();
//I tried this too. I still get the exception
//SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
MockRepository.ReplyAll();
mediator = new AddAddressMediator(form);
}
Recibo este error cuando intento configurar un simulacro para tener PropertyBehavior()
:
System.InvalidOperationException: System.InvalidOperationException: Llamada no válida, la última llamada se ha utilizado o no se ha realizado ninguna llamada (asegúrese de que está llamando a un método virtual (C #) / Anulable (VB)) ..
Estoy tratando de usar solo Rhino Mocks 3.5 (Organizar, Actuar, Afirmar)
Aquí está mi código:
private IAddAddressForm form;
private AddAddressMediator mediator;
[TestInitialize()]
public void MyTestInitialize()
{
form = MockRepository.GenerateMock<IAddAddressForm>();
mediator = new AddAddressMediator(form);
// Make the properties work like a normal property
Expect.Call(form.OKButtonEnabled).PropertyBehavior();
//I tried this too. I still get the exception
//SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
}
[TestMethod]
public void TestOKButtonEnabled()
{
form.OKButtonEnabled = true;
Assert.IsTrue(form.OKButtonEnabled);
}
Sé que podría usar un código auxiliar (y para el código anterior debería) pero estoy tratando de aprender Rhino Mocks.
Finalmente, quiero poder asegurarme de que varias propiedades tengan acceso a sus valores. (Cualquier sugerencia sobre cómo verificar ese form.FirstName
Se accedió a form.FirstName
(es decir, se llamó al captador).)
En caso de que sea necesario, aquí está el código para IAddressForm
:
namespace AddressBook
{
public interface IAddAddressForm
{
string FirstName { get; set; }
string LastName { get; set; }
string Address1 { get; set; }
string State { get; set; }
string Address2 { get; set; }
string ZipCode { get; set; }
string City { get; set; }
bool OKButtonEnabled { get; set; }
}
}
De todos modos, pensé que lo virtual no sería un problema ya que estoy pasando por una interfaz, pero claramente me falta algo.
Me encontré con este problema cuando intentaba llamar una propiedad internal
(solo getter) en un objeto en C #. En este caso, agregar .PropertyBehavior()
no ayudó.
Mi solución fue extraer la lógica de la propiedad y en un método interno que luego inyecté dependencias en este método (como parámetros).
Mencionó usar un código auxiliar en lugar de un simulacro, pero antes de ir a cambiarlo, lo notaría de forma extraña. Recibo la excepción de Invalid Call cuando utilicé GenerateStub, pero no cuando utilizo GenerateMock.
View = MockRepository.GenerateStub<IAddressView>();
View.Stub(v => v.Message).PropertyBehavior();
Esto lanza la excepción de llamada no válida y sí, IAddressView.Message tiene un getter y setter.
Nunca usé PropertyBehavior
antes, pero ¿es esta la sintaxis que está buscando?
form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()
Rhino Mocks funciona completamente a través de métodos de extensión ahora. La única llamada estática que hago cada vez más es a MockRepository.GenerateStub
.
Recibí este error cuando intenté establecer una expectativa en un método no virtual.
mockedObject.Expect(a => a.NonVirtualMethod()).Returns(null);
El error desapareció cuando hice VirtualVetualMethod virtual.