Помогите с синтаксисом Moles для тестирования частного метода с дженериками

У меня есть подпись для метода, который выглядит так: private IEnumerable BuildCustomerUpdatePlan(List localCacheChangedCustomers, List crmChangedCustomers){}

Когда я смотрю на созданный объект, синтаксис (IntelliSense) того, как вызывать метод и тестировать, совершенно сбивает меня с толку, и каждый раз, когда я пытаюсь это сделать, я получаю ошибки компиляции. Я просмотрел базовые учебные пособия, представленные на сайте MSFT, но я просто не понимаю, как тестировать закрытый метод с помощью Moles или как работать с типом возвращаемого значения и несколькими параметрами.

К сожалению, я не смог найти других хороших HOWTO или потоков, демонстрирующих более сложный пример, чем просто работа с простым методом Add(), который выдает INT и принимает INT. :(

Советы?


person Andrew Connell    schedule 07.09.2011    source источник


Ответы (1)


В проекте тестирования сначала убедитесь, что вы добавили сборку Moles, соответствующую тестируемой сборке. Вы также можете добавить оператор using тестируемой сборки с добавлением .Moles, чтобы вы могли использовать модифицированную сборку.

Moles меняет имена классов и методов на форму M[Original Class Name].[Original Method Name][typeof param1][typeof param2].... В вашем случае обход для этого метода может выглядеть как MClass.BuildCustomerUpdatePlanListList = (List x, List y) => { [code]};. Это определяет анонимный метод, который принимает два List в качестве параметров, и вы можете поместить в функцию любой код, который хотите. Просто убедитесь, что вы возвращаете IEnumerable в этом анонимном методе.

Вот пример использования Moles для обхода Directory.GetFiles:

using System.IO.Moles;
[assembly: MoledType(typeof(System.IO.Directory))]
...
    MDirectory.GetFilesStringString = (string x, string y) => new string[0];

Поскольку класс Directory является членом класса System.IO, я использую using System.IO.Moles;, чтобы указать, что я хочу использовать формованные члены сборки.

Moles требует, чтобы вы указали типы Moled: [assembly: MoledType(typeof(System.IO.Directory))] выполняет эту работу.

Наконец, Directory.GetFiles принимает две строки в качестве параметров и возвращает массив строк. Чтобы заставить метод возвращать эквивалент отсутствия файлов, метод moled просто возвращает new string[0]. Фигурные скобки необходимы, если вы хотите, чтобы в анонимном методе было несколько строк, и, если вы не обходите метод void, оператор return, который соответствует типу, возвращаемому исходным методом.

person jarz    schedule 08.09.2011