0

我正在尝试测试数据访问类。基本上,function1 是直接从 DataContext 中读取数据,而另一个 function2 是添加过滤器。function1 和 function2 可以在同一个类中或继承类。

如何存根 function1 的返回值并测试 function2?

示例代码我到此为止,但它不起作用。我曾尝试使用 Rhino Mocks 和 StructureMap Auto Mock,但在存根时仍然会出错。

任何帮助表示赞赏。非常感谢。

public class TestClass : ITestClass
{
    private DbContext _context;

    public IEnumerable<TestObject1> TestFunction1()
    {
        return _context.GetSomething();
    }

    public TestObject2 TestFunction2()
    {
        return TestFunction1().Where(x=>x.Parent == null);
    }
}
public interface ITestClass
{
    IEnumerable<TestObject1> TestFunction1();
    TestObject2 TestFunction2();
}
[Test]
public void TestFunction2_Test()
{
    var mock = MockRepository.GenerateMock<TestClass>();

    var test = new List<TestObject1>();

    mock.Stub(x=>x.TestFunction1()).Return(test);

    var result = mock.TestFunction2();

    Assert.AreSame(1, result.Count());
}
4

1 回答 1

2

为了让它工作,你需要一个“部分模拟”。Rhino Mocks 只能在执行部分模拟时存根虚拟方法。如果你标记TestFunction1virtual它应该工作。

您也应该使用Assert.AreEqual,因为它检查值是否相等(“对象是否等效?”)。Assert.AreSame检查引用相等性(“它们是同一个对象吗?”)。请参阅此答案以获取更多说明。

关于一般的部分模拟,应该避免它们。必须执行部分模拟通常表明该班级正在尝试做太多事情。要么将函数作为类单元测试的一部分进行测试,要么将其提取到单独的协作类中。

于 2013-07-30T20:10:42.633 回答