Pregunta

Estoy consiguiendo este error cuando intento para establecer una maqueta tener PropertyBehavior():

  

System.InvalidOperationException: System.InvalidOperationException:       llamada no válida, la última llamada se ha utilizado o se ha hecho ninguna llamada (asegúrese de que está llamando a un virtual (C #) / Overridable (VB) Método) ..

Estoy tratando de utilizar sólo burla de Rhino 3.5 (Organizar, Ley , Assert)

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 utilizar un talón (y para el código anterior que debería), pero estoy tratando de aprender burla de Rhino.

Finalmente, quiero ser capaz de asegurarse de que varias propiedades ha accedido a sus valores. (Se accede a alguna consejos sobre cómo comprobar que form.FirstName (es decir, el getter fue llamado) también sería apreciada.)

En el 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 virtual no sería un problema ya que estoy pasando en una interfaz, pero estoy perdiendo claramente algo.

¿Fue útil?

Solución

Nunca se utilizó PropertyBehavior antes, pero es esta la sintaxis que está buscando?

form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()

burla de Rhino funciona completamente a través de los métodos de extensión ahora. La única llamada estática que cada marca es más que MockRepository.GenerateStub.

Otros consejos

Usted ha mencionado el uso de un talón en lugar de una maqueta, pero antes de ir cambiándolo me gustaría tener en cuenta que extrañamente, consigo la excepción de llamada no válida cuando utilicé GenerateStub pero no cuando uso GenerateMock.

View = MockRepository.GenerateStub<IAddressView>();
View.Stub(v => v.Message).PropertyBehavior();

Esto produce la excepción llamada no válida y sí, IAddressView.Message tiene un getter y setter.

He recibido este error cuando trataba de establecer una expectativa de un método no virtual.

mockedObject.Expect(a => a.NonVirtualMethod()).Returns(null);

El error se fue cuando hice NonVirtualMethod virtual.

Creo que tienes que hacer MockRepository.ReplyAll () después de configurar todas las expectativas y antes de empezar a usar el simulacro. Así que yo creo en su caso es que usted tiene que mover la línea Expect.Call antes mediador = new AddAddressMediator (forma) ;, y pegar la respuesta bien 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);



}

Me encontré con este problema cuando yo estaba tratando de llamar a una propiedad internal (getter solamente) en un objeto en C #. En este caso, la adición de .PropertyBehavior() no ayudó.

Mi solución era extraer la lógica de la propiedad y en un método interno que luego Inyecté dependencias en este método (como parámetros).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top