У меня есть следующая структура класса, которая мне нужна для модульного тестирования:
public interface IFoo
{
int Value { get;}
int GetValue();
}
public class BaseClass : IFoo
{
public virtual int Value { get { return 100; } }
public virtual int GetValue()
{
return Value;
}
}
public class ChildClass : BaseClass, IFoo
{
public override int GetValue()
{
return Value;
}
}
Я пытаюсь протестировать метод ChildClass.GetValue () с RhinoMocks.
У меня есть следующий код заглушки:
public ChildClass CreateChildClass(int value)
{
var childClass = MockRepository.GenerateStub<ChildClass>();
childClass.Stub(x => x.Value).Return(value);
return childClass;
}
И следующий код UnitTest:
public IEnumerable<IFoo> CreateList()
{
yield return CreateChildClass(1000);
yield return CreateChildClass(2000);
}
[TestMethod]
public void virtualMethodTest()
{
var list = CreateList();
var query = from p in list
select p.GetValue(); //I can't use p.Value
var sum = query.Sum(p => p);
}
Проблема в том, что сумма всегда равна нулю.Я могу быстро просмотреть список и увидеть два фиктивных объекта с правильными значениями из CreateList ().
Можно ли выполнить модульное тестирование виртуального метода в дочернем классе?или мне нужно использовать другой подход RhinoMocks?
Спасибо