我有以下类定义,attribute
字段通过NHibernate的反射来补充水分。该字段不作为对象公开,而是我想隐藏它的实现,只提供引用attribute
字段属性的属性。
public class CustomerAttribute : ICustomerAttribute
{
private IAttribute attribute;
public string DisplayName
{
get { return attribute.DisplayName;}
}
}
我正在尝试使用RhinoMocks来模拟这个对象,但我不确定如何为attribute
字段进行水合测试。我已经尝试通过反射手动设置attribute
字段,但是我从RhinoMocks获得了代理错误(这很有意义)。
那么如何将attribute
字段保存到我可以测试CustomerAttribute对象的属性?
这是我现在的测试......
[Test]
public void PropertiesTest()
{
MockRepository mock = new MockRepository();
ICustomerAttribute attribute = mock.StrictMock<ICustomerAttribute>();
//Set the attribute field
FieldInfo fieldInfo = typeof(CustomerAttribute).GetField("attribute",
BindingFlags.Instance | BindingFlags.SetField |
BindingFlags.NonPublic);
fieldInfo.SetValue(attribute, new Domain.Attribute()); //This does not work
Expect.Call(attribute.DisplayName).Return("Postal Code");
mock.ReplayAll();
Assert.AreEqual(true, attribute.DisplayName);
mock.VerifyAll();
}
答案 0 :(得分:0)
如果CustomerAttribute是您的测试对象(SUT),并且IAttribute是需要模拟测试的依赖项,则IAttribute很可能需要注入CustomerAttribute。这应该通过构造函数(通常是首选)或属性注入来完成。如果您不熟悉它,请查看“控制倒置”。
此外,不应将ICustomerAttribute创建为模拟 - 应明确创建具体类型(即“new CustomerAttribute”)。毕竟,CustomerAttribute(实现!)就是您要测试的内容。
答案 1 :(得分:0)
我不确定你要在这里测试什么。如果要测试CustomerAttribute类而不是创建它的实例(而不是模拟ICustomerAttribute)。
要在CustomerAttribute上设置属性,您可以