2 Stimmen

Wie kann man mit Rhino Mocks den Wert eines Struct-Feldes in dem an ein Mock-Objekt übergebenen Parameter überprüfen?

In Rhino Mocks teste ich eine Methode namens Store in der Klasse Subject. Die Methode Subject.Store(Member) ruft intern IStore.Store(Person) auf. Wie überprüfe ich, dass der Name-Parameter, den ich auf dem Member setze, derselbe Name ist, der im Person-Parameter im Aufruf von IStore.Store(Person) vorhanden ist.

Offensichtlich wäre es eine Option, eine Equals-Methode in der Struktur zu implementieren und dann Arg.Is.Equals aufzurufen. Aber ich habe keine Kontrolle über den Quellcode für Person oder Member-Strukturen.

Hier ist das Codeschnipsel..

struct Person {
        string name;
        int age;
        char sex;
    }

    struct Member {
        string name;
        string address;
        string departnemt;

        public Member(string name, string address, string departnemt) {
            // TODO: Complete member initialization
            this.name = name;
            this.address = address;
            this.departnemt = departnemt;
        }
        //other methods
    }

    interface IStore {
        void Store(Person p);
        //other methods
    }

    class Subject {
        IStore db;
        public void Store(Member m) {
            //some logic to convert Member to Person
            Person p = GetPersonFromMember(m);
            db.Store(p);
        }

        //other methods
    }

[Test]
        public void TestStore() {
            //Arrange
            Member m = new Member("dave", "crawford Ave", "Physics");

            var mockStore = MockRepository.GenerateMock<IStore>();
            mockStore.Expect(x => x.Store(Arg<Person>.Is.NotNull));
            //here i also want to check that the Person.Name is "dave"
            //how can i do this?

            //Act
            subject.Commit();

            //Assert
            mockStore.VerifyAllExpectation();
        }

6voto

giltanis Punkte 497

Anstelle von oder zusätzlich zu folgenden Tätigkeiten Arg<Person>.Is.NotNull können Sie tun Arg<Person>.Property.Value("Name", m.Name)

Auch vorausgesetzt, Sie tun .Net 3.5 oder höher können Sie etwas tun, die Sie vielleicht oder nicht denken, liest besser und vermeidet die Zeichenfolge mit dem Namen der Eigenschaft: Arg<Person>.Matches(p => p != null && p.Name == m.Name)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X