是否有可能将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);
答案 0 :(得分:3)
您很可能无法为GetUsersFromDB()
设置存根的原因是此方法不是虚拟的或不公开的。
所以你可以使它public virtual
并设置存根。
但是如果你根据single responsibility principle调整类并将数据库访问代码提取到一个带有IDbAccess
之类的接口的单独类中,可能会好得多,例如
interface IDbAccess
{
User GetUsersFromDB();
}
然后你可以inject interface as a dependency进入Network
类并在那里使用它而不是使用DB访问方法成员。
因此,出于测试目的,您可以只注入接口IDbAccess
并运行测试,而无需为测试类生成存根,即Network
。