Domanda

sto ottenendo questo errore quando provo a impostare un modello per avere PropertyBehavior():

  

System.InvalidOperationException: System.InvalidOperationException:       chiamata non valido, l'ultima chiamata è stata utilizzata o nessuna chiamata è stata fatta (assicurarsi che si sta chiamando un virtuale (C #) / Overridable (VB) metodo) ..

Sto cercando di utilizzare solo Rhino Mocks 3.5 (Arrange, Act , Assert)

Qui è il mio codice:

    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);
    }

So che potrei usare uno stub (e per il codice di cui sopra avrei dovuto), ma sto cercando di imparare Rhino Mocks.

Alla fine voglio essere in grado di fare in modo che diverse proprietà ha accesso i loro valori. (Eventuali suggerimenti su come verificare che form.FirstName avuto accesso (cioè il getter è stato chiamato) sarebbe anche apprezzato.)

In caso di necessità, ecco il codice per 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; }
    }
}

In ogni caso, ho pensato che virtuale non sarebbe un problema in quanto sto passando in un'interfaccia, ma sto chiaramente manca qualcosa.

È stato utile?

Soluzione

Mai usato PropertyBehavior prima, ma è questa la sintassi che stai cercando?

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

Rhino Mocks funziona completamente attraverso metodi di estensione ora. L'unica chiamata statica che ogni marca più è quello di MockRepository.GenerateStub.

Altri suggerimenti

Lei ha parlato con uno stub invece di una finta, ma prima di andare cambiarla mi piacerebbe notare che stranamente, ottengo l'eccezione di chiamata non valido quando ho usato GenerateStub ma non quando uso GenerateMock.

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

Questo genera l'eccezione di chiamata non valido e sì, IAddressView.Message ha un getter e setter.

ho ricevuto questo errore quando ho cercato di impostare un'aspettativa su un metodo non virtuale.

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

L'errore è andato via quando ho fatto NonVirtualMethod virtuale.

Credo che bisogna fare MockRepository.ReplyAll () dopo aver impostato tutte le aspettative e prima di iniziare a usare il finto. Quindi la mia ipotesi nel tuo caso è che si deve spostare la linea Expect.Call prima di mediatore = new AddAddressMediator (forma) ;, e bastone la risposta tutto subito dopo che:

[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);



}

Mi sono imbattuto in questo problema quando stavo cercando di chiamare una proprietà internal (getter solo) su un oggetto in C #. In questo caso, l'aggiunta di .PropertyBehavior() non ha aiutato.

mia soluzione era di estrarre la logica di proprietà e in un metodo interno che poi iniettato dipendenze in questo metodo (come parametri).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top