отличный ответ :)

но я делал свой первый проект по разработке через тестирование и изучал 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 и принимает и «записывает» аргументы конструктора?

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

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

Джим

Ответы на вопрос(1)

Ваш ответ на вопрос