使用RHinomock进行测试

本文关键字:测试 RHinomock 使用 | 更新日期: 2023-09-27 18:00:03

我有一个类要测试,与普通类不同,使用Rhinomock测试很难,因为它的构造函数注入了依赖项,该依赖项不是单个接口,而是接口对象的数组。请帮我设置所有的东西来使用rhinomock编写测试。

namespace ClinicalAdvantage.Domain.UserAppSettings
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Newtonsoft.Json.Linq;
    public class Agg : IAgg
    {
        private readonly ISource[] sources;
        public Agg(ISource[] sources)
        {
            this.sources = sources;
         }
        public JObject GetAll()
        {
            var obj = new JObject();
            foreach (var source in this.sources)
            {
                var token = source.GetCurr();
                if (token != null)
                {
                    obj.Add(new JProperty(source.Name, token));
                }
            }
            return obj;
        }
}

ISource是一个有2个实现的接口。GetALL()遍历每个实现的类对象,并在每个对象中调用GetCurr方法并聚合结果。我必须存根GetCurr方法才能返回标准Jtoken。我无法创建此类Agg的mock或ISource的存根。

public interface ISource
    {
        string Name { get; }
        bool Enabled { get; }
        JToken GetCurr();

    }

}

使用RHinomock进行测试

类似的东西可能会起作用:

[TestClass]
public class AggTest
{
    private ISource Isource;
    private Agg agg;
    [TestInitialize]
    public void SetUp()
    {
        Isource = MockRepository.GenerateMock<ISource>();
        agg = new Agg(new [Isource]);
    }
    [TestMethod]
    public void GetAll()
    {
        Isource.Stub(x => x.GetCurr()).
            Return(new JToken());
        var jObject = agg.GetAll();
        Assert.IsNotNull(jObject);
        // Do your assertion that all JProperty objects are in the jObject
        // I don't know the syntax
    }
}