[翻译] NMock 两分钟教程

NMock 两分钟教程

原文:http://confluence.public.thoughtworks.org/display/NMock/Two+minute+tutorial

最后修改:2004-05-30,Chris Stevenson
翻译:NetCobra


本教程假定你对单元测试和NUnit非常熟悉。

作为一个简单的例子,我们来测试一个信息发布/订阅系统。发布者向零到多个订阅者发布数据,我们需要对发布者进行测试,测试发布者和订阅者之间的交互作用。

public interface ISubscriber
{
    void Receive(Object message);
}

我们将测试发布者对单个的已注册的 ISubscriber 发布信息,为了检测发布者和 ISubscriber 之间的交互作用,测试过程中我们将使用模拟的 ISubscriber。

首先我们来设置测试所需要的环境。首先要创建一个待测试的 Publisher;然后,我们创建一个模拟的 ISubscriber 用于接收信息;接下来把 ISubscriber 在 Publisher 中进行注册,最后,我们来创建一个 message 对象以进行发布。

Mock mockSubscriber = new DynamicMock(typeof(ISubscriber));

Publisher publisher = new Publisher();
publisher.Add((ISubscriber) mockSubscriber.MockInstance);

object message = new Object();

我们所创建的模拟订阅者(mockSubscriber)对象实现了 ISubscriber 接口,这样当测试中的对象调用其 ISubscriber 实例时,我们可以设置断言(assertions)。

下面我们来定义模拟的 ISubscriber 在测试运行过程中需要调用的方法的预期行为(expectations),我们希望 Receive 方法在调用时只传递一个参数——要发送的信息,因为返回值类型为空,因此不需要制定返回值。

mockSubscriber.Expect("Receive",message);

然后执行要测试的代码。

publisher.Publish(message);

最后我们来校验模拟的订阅者是否如我们所期望的被调用了。如果我们不进行校验,那么我们的测试代码将检测到对模拟订阅者的不正确调用,但是不是the complete lack of calls(抱歉不会翻译,原文是our test will detect incorrect calls to the mock Subscriber but not the complete lack of calls.)。

mockSubscriber.Verify();

下面是完整的测试代码:

using  System;

using  NMock;
using  NUnit.Framework; 

namespace  sample.subscriber
{
    [TestFixture]
    
public class PublisherTest
    
{
        [Test]
        
public void OneSubscriberReceivesAMessage()
        
{
            
// set up
            Mock mockSubscriber = new DynamicMock(typeof(ISubscriber));
            Publisher publisher 
= new Publisher();
            publisher.Add((ISubscriber) mockSubscriber.MockInstance); 

            
object message = new Object();

            
// expectations
            mockSubscriber.Expect("Receive",message); 

            
// execute
            publisher.Publish(message); 

            
// verify
            mockSubscriber.Verify();
        }

    }

}
 

你可能感兴趣的:(mock)