使用Rhino模拟如何检查传递给模拟对象的参数中的Struct字段的值

本文关键字:模拟 对象 参数 Struct 字段 何检查 Rhino 检查 使用 | 更新日期: 2023-09-27 18:03:50

在Rhino mock中,我正在Subject类中测试一个名为Store的方法。Subject.Store(Member)内部调用store . store (Person)。如何检查在Member上设置的name参数是否与调用store.store (Person)中的Person参数中出现的名称相同?

显然,在结构体中实现一个Equals方法,然后调用Arg.Is.Equals将是一个选项。但是我无法控制Person或Member结构体的源代码。

下面是代码片段。

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

使用Rhino模拟如何检查传递给模拟对象的参数中的Struct字段的值

除了Arg<Person>.Is.NotNull,你还可以做Arg<Person>.Property.Value("Name", m.Name)

同样假设你正在做。net 3.5或更高版本,你可以做一些你可能认为或不认为更好的事情,并避免带有属性名的字符串:Arg<Person>.Matches(p => p != null && p.Name == m.Name)