Frage

Ich habe eine Eigenschaft in einer Schnittstelle, die ich habe Rhino Mocks verspottet werden. Ich möchte wissen, ob es in meinem Unit-Test ausgewählt wurde.

Gibt es eine Möglichkeit, um zu sehen, ob die Eigenschaft über Rhino Mocks zugegriffen wurde?

Ich habe diesen Code hier , aber es nicht zu funktionieren scheint:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

ich reproduziert diesen Code und ich erhalte die folgende:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

Ich möchte diese Syntax verwenden, aber ich muss etwas fehlen. Ich bin es mit einem Stummel Aufruf (kein mock) macht das einen Unterschied machen?

War es hilfreich?

Lösung 2

Schaltet die Syntax I wurde mit funktioniert. Aber es funktioniert nur, wenn die Eigenschaft nicht in PropertyBehavior-Modus befindet. (Das ist die Standardeinstellung für Stubs und kann für Mocks eingeschaltet werden).

Sobald PropertyBehavior Modus eingeschaltet wird, dann wird diese Syntax funktioniert nicht. Nach Ayende den Wert an diesem Punkt zu überprüfen.

Andere Tipps

  

Gibt es eine Möglichkeit, um zu sehen, ob die Eigenschaft   wurde über Rhino Mocks zugegriffen?

Ja. Sie können eine Erwartung für die Eigenschaft einzurichten. Wenn die Überprüfung nicht werfen, dann wissen Sie das Objekt zugegriffen wurde:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

Das ist alles unter der Annahme, dass Sie foo.Name zugegriffen werden soll. Wenn Ihr Ziel zu überprüfen ist, dass es nicht zugegriffen wird, dann sollten Sie nur StrictMock anstelle von DynamicMock. Eine strenge Mock für unerwartete Anrufe werfen.

Wenn Sie behaupten wollen, dass eine Methode aufgerufen wurde oder eine Eigenschaft auf einem gefälschten Objekt zugegriffen wird, sollten Sie immer ein Mock verwenden. Stubs ist für Situationen, in denen Sie nicht wollen, die Interaktion testen, sondern will nur sicherstellen, dass ein Anruf auf ein Objekt einen bestimmten Wert gibt den logischen Fluss zu machen.

Ich glaube, StrictMock ist, was für Ihre suchen. Es gibt einige Informationen über sie hier . Es ist die Verwendung gesagt wird, entmutigt werden, weil es Tests zu spröde machen, aber es sollte helfen Sie erreichen, was Sie zu tun versuchen.

Sie können den Call-Stack überprüfen Sie die StackFrame-Klasse. Nicht sehr sauber, aber es sollte das gewünschte Ergebnis geben ...

ich in der Regel verwenden Moq die Burg verwendet, so dass Sie es stattdessen betrachten könnten / zusammen mit dem Rhino Mocks. Dies ist, wie Sie es dort tun können:

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top