【问题标题】:Can I use a mock object to test this?我可以使用模拟对象来测试吗?
【发布时间】:2013-11-07 17:24:34
【问题描述】:

这里非常少。我有一个要测试的视图模型,但我不确定是否只需要实现一个接口,或者是否有一个模拟框架可以为我完成。

我要做的是给我的视图模型一个 IProcessQueueCommand,并触发 MessageProcessed 事件,该事件将执行我的 lambda,然后设置 LastProcessedMessage

视图模型:

public string LastProcessedMessage
{
    get
    {
        return this.lastProcessedMessage;
    }
    private set
    {
        this.lastProcessedMessage = value;
        this.FirePropertyChanged("LastProcessedMessage");
    }
}private string lastProcessedMessage;

public IProcessQueueCommand ProcessQueueCommand
{
    get
    {
        return this.processQueueCommand;
    }
    set
    {
        this.processQueueCommand = value;
        this.processQueueCommand.MessageProcessed += (evt) =>
        {
            this.LastProcessedMessage = evt.Text;
        };
    }
}private IProcessQueueCommand processQueueCommand;

【问题讨论】:

  • 您说您有一个要测试的 ViewModel。但是,您要测试 ViewModel 中的确切行为是什么?比如要验证IProcessQueueCommand.MessageProcessed方法被调用还是什么的?
  • 我想测试当 this.processQueueCommand 上的 MessageProcessed 事件被触发时, LastProcessedMessage 被更新。我是模拟新手,闻起来好像不是模拟对象的情况

标签: .net unit-testing mocking moq


【解决方案1】:

您可以使用假对象或模拟对象对其进行测试。

假对象: 实现 IProcessQueueCommand 接口并公开“触发事件”方法的对象。您可以在视图模型中注入一个实例,调用“触发事件”方法,最后测试 LastProcessedMessage 属性

模拟对象: 完全相同,但假实现和“火灾事件”方法是由模拟框架动态生成的。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2010-10-25
    • 2022-09-30
    • 2019-09-25
    • 2018-12-27
    • 2012-07-02
    • 1970-01-01
    • 2015-04-12
    • 2015-03-20
    相关资源
    最近更新 更多