我一直在使用RhinoAutoMocker进行单元测试,并且几乎在所有情况下都能很好地工作。我目前无法弄清楚当被测试类有简单的构造函数参数时如何使用它。如何使用RhinoAutoMocker注入原始值?
比方说,我有这样定义两个类:
public class AddAnswerValidator : BaseValidator
{
public AddAnswerValidator(Answer answerToAdd,
IAnswerRepository answerRepository)
{
...some code
}
public override bool Validates()
{
...some code
}
}
public class RemoveAnswerValidator : BaseValidator
{
public RemoveAnswerValidator(int answerIDToRemove,
IAnswerRepository answerRepository)
{
...some code
}
public override bool Validates()
{
...some code
}
}
的试验例每个如下:
[Test]
public void AddAnswerValidatorTests_Validates_ValidInput_ReturnsTrue()
{
var autoMocker = new RhinoAutoMocker<AddAnswerValidator>();
var fakeAnswer = new Answer();
autoMocker.Inject<Answer>(fakeAnswer);
var result = autoMocker.ClassUnderTest.Validates();
Assert.IsTrue(result);
}
[Test]
public void RemoveAnswerValidatorTests_Validates_ValidInput_ReturnsTrue()
{
var autoMocker = new RhinoAutoMocker<RemoveAnswerValidator>();
var fakeAnswerID = 1;
autoMocker.Inject<int>(fakeAnswerID);
var result = autoMocker.ClassUnderTest.Validates();
Assert.IsTrue(result);
}
第一个测试(用于AddAnswerValidator)工作正常。第二个测试(对于RemoveAnswerValidator)失败,出现StructureMap 202错误“没有为插件系列RemoveAnswerValidator定义缺省实例”错误。我正在假设第二个测试失败,因为StructureMap没有解析整型构造函数参数。
我读过this post regarding RhinoAutoMocker Injection for collections,我一直在寻找source code on GitHub,但我不明白为什么原始值没有被注入。
我甚至尝试了一些替代的重载进样方法可用容器对象如:
autoMocker.Inject<int>(fakeAnswerID);
与
autoMocker.Container.Inject<int>("answerIDToRemove", fakeAnswerID);
但是使用这个名字的构造函数参数不产生任何不同的结果。
-
从长远来看,这是不是一个巨大的问题,因为我永远可以创建类的实例在测试和创建自己的嘲弄,这纯粹是高兴能够在我的所有测试中使用一致的方法。