2014-04-25 6 views
0

У меня есть класс для тестирования, который сложно проверить с помощью 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 или заглушку ISource.

public interface ISource 
    { 
     string Name { get; } 

     bool Enabled { get; } 

     JToken GetCurr(); 


    } 

}

+0

возможно дубликат [Может не фиктивный класс с конструктором, имеющим параметр массива с помощью Rhino Mocks] (http://stackoverflow.com/questions/2855271/не может-макет класса с-конструктор-имеющий-массив параметров, использующих-рино-издевается) –

ответ

0

Нечто подобное может работать:

[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 
    } 
} 
Смежные вопросы