gpt4 book ai didi

c# - 使用Rhino Mocks如何检查传递给模拟对象的参数中结构字段的值?

转载 作者:行者123 更新时间:2023-12-03 21:39:12 24 4
gpt4 key购买 nike

在Rhino Mocks中,我正在测试Subject类中名为Store的方法。subject.Store(Member) 内部调用 IStore.Store(Person)。如何检查在 Member 上设置的名称参数是否与调用 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();
}

最佳答案

代替 Arg<Person>.Is.NotNull 或除了这样做之外你可以做Arg<Person>.Property.Value("Name", m.Name)

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

关于c# - 使用Rhino Mocks如何检查传递给模拟对象的参数中结构字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com