正在创建模拟对象
本文关键字:对象 模拟 创建 | 更新日期: 2023-09-27 18:20:06
我在WPF中创建了一个简单的GUI。我想展示一些从数据库中得到的数据。但现在我只有GUI和一些对接收到的数据进行简单计算的功能。我知道我的目标是创建能够生成一些"错误"数据的mock对象,但我不知道如何开始。你能告诉我如何创建其中一个吗?然后我可以类似地创建其余的。这是我的计算类:
public Statistic showUsersPostCount(Options options)
{
Query q = (Query)this.client.DoQuery();
q.AddAuthor(options.Login);
q.SetSinceDate(options.DateFrom);
q.SetUntilDate(options.DateTo);
q.AddTitleWord(options.Discussion);
List<Entity> list = (List<Entity>)q.PerformQuery();
Statistic statistic = new Statistic();
statistic.UsersPostCount = list.Count;
return statistic;
}
此函数返回一些简单的统计信息。但我没有Query类的代码。我怎样才能嘲笑这个类的对象?
使用提供的代码。。。你不能,为了模拟它,你需要某种方式为依赖项提供一个替代对象(在本例中是.client对象)。
事实上,该方法只有一个输入"选项",但对代码的影响相对较小。
此外,您声称显示了一个类的示例,但事实并非如此,您只显示了一种名为showUsersPostCount的方法。
假设您的代码是要模拟的类中的一个方法,那么您的第一步将是为该类创建一个要实现的接口,如果您还没有这样做的话
然后,您可以将接口(而不是具体类)传递给一个mocking框架(我使用过Moq,但我认为nmock的工作原理非常相似)。然后,您可以填写您希望属性/方法通过mocking框架返回的mock数据。
正如其他人所提到的,您的代码不能按原样进行模拟……至少使用标准的模拟工具是这样。总有鼹鼠,它以允许你"嘲笑无法锁住的人"而自豪。鼹鼠会允许你嘲笑这种方法。
也就是说,如果你不得不求助于Moles来模拟你内部控制的东西(该工具实际上是为了模拟数据库和文件等外部依赖关系而设计的),你可能应该考虑让你的设计更灵活。总的来说,一个可测试的(即没有Moles也可测试的)设计更有可能是一个好的设计。