Как тестировать Ninject ConstructorArguments с помощью объектов MOQ?

Недавно я выполнял свой первый проект разработки через тестирование и изучал Ninject и MOQ. Это моя первая попытка все это сделать. Я обнаружил, что подход TDD заставляет задуматься, а Ninject и MOQ оказались великолепными. Проект, над которым я работаю, не особенно подходит для Ninject, поскольку это программа на C # с широкими возможностями настройки, предназначенная для тестирования использования интерфейса веб-службы.

Я разбил его на модули и имею интерфейсы по всему магазину, но я все еще обнаружил, что мне приходится использовать множество аргументов конструктора при получении реализации службы из ядра Ninject. Например:

В моем модуле Ninject;

Bind<IDirEnum>().To<DirEnum>()

Мой класс DirEnum;

public class DirEnum : IDirEnum
{
    public DirEnum(string filePath, string fileFilter, 
        bool includeSubDirs)
    {
        ....

В моем классе Configurator (это основная точка входа), который объединяет все службы вместе;

class Configurator
{

    public ConfigureServices(string[] args)
    {
        ArgParser argParser = new ArgParser(args);
        IDirEnum dirEnum = kernel.Get<IDirEnum>(
            new ConstructorArgument("filePath", argParser.filePath),
            new ConstructorArgument("fileFilter", argParser.fileFilter),
            new ConstructorArgument("includeSubDirs", argParser.subDirs)
        );

filePath, fileFilter и includeSubDirs являются командами строчные параметры программы. Все идет нормально. Однако, будучи человеком сознательным, у меня есть тест, охватывающий этот фрагмент кода. Я хочу использовать объект MOQ. Я создал модуль Ninject для своих тестов;

public class TestNinjectModule : NinjectModule
{
    internal IDirEnum mockDirEnum {set;get};
    Bind<IDirEnum>().ToConstant(mockDirEnum);
}

И в своем тесте я использую его так:

[TestMethod]
public void Test()
{
    // Arrange
    TestNinjectModule testmodule = new TestNinjectModule();
    Mock<IDirEnum> mockDirEnum = new Mock<IDirEnum>();
    testModule.mockDirEnum = mockDirEnum;
    // Act
    Configurator configurator = new Configurator();
    configurator.ConfigureServices();
    // Assert

    here lies my problem! How do I test what values were passed to the
    constructor arguments???

Итак, приведенное выше показывает мою проблему. Как я могу проверить, какие аргументы были переданы в ConstructorArguments фиктивного объекта? Я предполагаю, что в этом случае Ninject распределяет ConstuctorArguments, поскольку Bind их не требует? Могу ли я проверить это с помощью объекта MOQ или мне нужно вручную создать код фиктивного объекта, который реализует DirEnum и принимает и «записывает» аргументы конструктора?

n.b. этот код является «примерным» кодом, т.е. я не воспроизвел свой код дословно, но я думаю, что я выразил достаточно, чтобы, надеюсь, передать проблемы? Если вам нужно больше контекста, спросите!

Спасибо за внимание. Будьте осторожны, это мой первый раз; -)

Джим

6
задан Steven 9 June 2011 в 11:22
поделиться