Rhinomocks存根法

时间:2014-05-05 14:36:43

标签: c# unit-testing rhino-mocks stub

是否有可能将1种方法与Microsoft Fakes中的填充方式完全相同?

在这种情况下,我想将数据库调用存根,但继续使用其余的方法逻辑。

public class Network
{
    public string GetUsers()
    {
       User users = GetUsersFromDB();
       return users.Formatted();
    }

测试:

Network network = MockRepositiory.GenerateStub<Network>();

network.Stub(x => x.GetUsersFromDB()).Return(myTestUserObject);

string result = network.GetUsers();

Assert.AreEqual(expected, result);

1 个答案:

答案 0 :(得分:3)

您很可能无法为GetUsersFromDB()设置存根的原因是此方法不是虚拟的或不公开的。
所以你可以使它public virtual并设置存根。

但是如果你根据single responsibility principle调整类并将数据库访问代码提取到一个带有IDbAccess之类的接口的单独类中,可能会好得多,例如

interface IDbAccess
{
    User GetUsersFromDB();
}

然后你可以inject interface as a dependency进入Network类并在那里使用它而不是使用DB访问方法成员。
因此,出于测试目的,您可以只注入接口IDbAccess并运行测试,而无需为测试类生成存根,即Network