Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Rhino mock如何检查传递给模拟对象的参数中Struct字段的值?_C#_Unit Testing_Rhino Mocks - Fatal编程技术网

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

C# 使用Rhino mock如何检查传递给模拟对象的参数中Struct字段的值?,c#,unit-testing,rhino-mocks,C#,Unit Testing,Rhino Mocks,在Rhino Mock中,我正在测试Subject类中名为Store的方法。 Subject.Store(成员)在内部调用IStore.Store(Person)。如何检查在成员上设置的name参数是否与调用IStore.Store(Person)时Person参数中的名称相同 显然,在结构中实现Equals方法,然后调用Arg.Is.Equals将是一种选择。但我无法控制Person或Member结构的源代码 下面是代码片段 struct Person { string nam

在Rhino Mock中,我正在测试Subject类中名为Store的方法。 Subject.Store(成员)在内部调用IStore.Store(Person)。如何检查在成员上设置的name参数是否与调用IStore.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();
        }
struct-Person{
字符串名;
智力年龄;
性别;
}
结构成员{
字符串名;
字符串地址;
弦部;
公共成员(字符串名称、字符串地址、字符串部门){
//TODO:完成成员初始化
this.name=名称;
this.address=地址;
this.departnemt=departnemt;
}
//其他方法
}
接口晶体管{
空库(p人);
//其他方法
}
班级科目{
晶体管分贝;
公共仓库(成员m){
//将成员转换为个人的一些逻辑
人员p=GetPersonFromMember(m);
db.Store(p);
}
//其他方法
}
[测试]
公共void TestStore(){
//安排
成员m=新成员(“戴夫”、“克劳福德大街”、“物理学”);
var mockStore=MockRepository.GenerateMock();
Expect(x=>x.Store(Arg.Is.NotNull));
//在这里,我还想确认这个人的名字是“dave”
//我该怎么做?
//表演
subject.Commit();
//断言
mockStore.verifyallexpection();
}

您可以执行
参数属性值(“Name”,m.Name)

另外,假设您使用的是.Net 3.5或更高版本,您可以做一些您可能认为或可能不认为读起来更好的事情,并避免使用带有属性名的字符串:
Arg.Matches(p=>p!=null&&p.Name==m.Name)