创建模拟对象

时间:2012-01-12 23:15:00

标签: c# wpf mocking nmock

我在WPF中创建了简单的GUI。我想在那里展示一些从数据库中获取的数据。但是现在我只有GUI和几个函数可以对接收到的数据进行简单的计算。我知道我的目标是创建可以生成一些“错误”数据的模拟对象,但我不知道如何开始。你能告诉我如何创建其中一个,然后我可以创建类似的其余部分。这是我的班级进行计算:

        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的代码。我怎么能模拟这个类的对象?

3 个答案:

答案 0 :(得分:0)

使用提供的代码...您不能,为了模拟它,您需要某种方式为依赖项提供替代对象(在本例中是.client对象)。

实际上,该方法只有一个输入“选项”,但对代码的影响相对较小。

此外,您声称要显示一个类的示例 - 但您不是 - 您只显示名为showUsersPostCount的方法。

答案 1 :(得分:0)

假设您的代码是您想要模拟的类中的方法,那么您的第一步就是为类实现创建一个接口,如果您还没有这样做的话。

然后你可以将你的界面(而不是你的具体类)传递给一个模拟框架(我使用过Moq,但我认为nmock的工作方式非常相似)。然后,您可以填写希望属性/方法通过模拟框架返回的模拟数据。

答案 2 :(得分:0)

正如其他人所提到的,您的代码不是可模仿的......至少使用标准的模拟工具。始终有Moles,它以允许你“模仿不可撼动”为荣。 Moles会允许你按原样模拟该方法。

也就是说,如果你不得不求助于Moles来模拟你内部控制的东西(这个工具真的是为了模拟外部依赖,比如数据库和文件等),你应该考虑让你的设计更灵活。总的来说,一个可测试的(可测试的没有Moles,设计)更可能是一个好的设计。