我必须测试这个课程:
public class MemberHelper
{
private readonly MemberInfo _info;
public MemberHelper(MemberInfo info)
{
_info = info;
}
...
}
所以在单元测试类中,我决定使用Unity根据我传递的MemberInfo类型解析此类的两个版本,这样:
[SetUp]
public void Setup()
{
_ioc = new UnityContainer();
_dummy = new NullableDummy();
var field = _dummy.GetType().GetField("nullableField") as FieldInfo;
var property = _dummy.GetType().GetProperty("NullableProperty") as PropertyInfo;
_ioc.RegisterType<MemberHelper>("fieldHelper", new InjectionConstructor(field));
_ioc.RegisterType<MemberHelper>("propertyHelper", new InjectionConstructor(property));
_line = "2014-03-0300012300";
}
[Test]
public void ShouldDeserializeInNullableField()
{
_member = _ioc.Resolve<MemberHelper>("fieldhelper");
_member.SetValue(_dummy, _line.Substring(0,10));
Assert.IsTrue(_dummy.nullableField.HasValue);
}
当我执行测试时,它返回一个InvalidOperationException:MemberInfo没有可调用的构造函数。 当我刚刚传递一个带有良好就绪参数的InjectionConstructor时,为什么它会尝试调用MemberInfo构造函数?
我还尝试调用Resolve方法传递一个ParameterOverride,并将相同的参数传递给InjectionConstructor,它已经工作了!
有人可以解释我,因为所有这些都发生了吗? 提前谢谢。
答案 0 :(得分:0)
编辑:更改答案
替换
_member = _ioc.Resolve<MemberHelper>("fieldhelper");
与
_member = _ioc.Resolve<MemberHelper>("fieldHelper");
fieldhelper中的h在一个实例中大写,而不是另一个
编辑:这是完整的工作代码http://pastebin.com/kuxDgxPL