我有一个有两种方法的类。一种方法需要调用另一种方法,在我的测试中,我想声明它被调用。
public class Tasks : ITasks
{
public void MethodOne()
{
MethodTwo(1);
}
public int MethodTwo(int i)
{
return i + 1;
}
}
我想模拟任务并执行tasks.AssertWasCalled(x => x.MethodTwo(1))
之类的操作。必须 MethodTwo 是虚拟的吗?
答案 0 :(得分:1)
你正在寻找的概念是partial mocks(这显示了旧的语法,但我不记得我头脑中的新词)。你应该阅读它。基本上你在Tasks(而不是ITasks)上创建模拟并告诉它只模拟MethodTwo(它需要是虚拟的)。
然而......你可能想重新考虑你的设计。什么是ITasks?有什么作用?它们是不同的实际任务吗?你有什么理由想要他们在同一个班级吗?我的理解是,只有当你需要测试遗留组件时才包含部分模拟 - 我从来没有找到它的用途。
答案 1 :(得分:0)
当然我当时的想法是有缺陷的。我应该嘲笑ITasks,而不是实现(任务):
ITasks tasks = MockRepository.GenerateMock<ITasks>();
tasks.AssertWasCalled(x => x.MethodTwo(Arg<int>.Is.Equal(1)));