отличный ответ :)
но я делал свой первый проект по разработке через тестирование и изучал 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 и принимает и «записывает» аргументы конструктора?
нотабене этот код является примером кода, т. е. я не воспроизводил дословно мой код, но я думаю, что я выразил достаточно, чтобы, надеюсь, передать проблемы? Если вам нужно больше контекста, пожалуйста, спросите!
Спасибо за поиск. Будьте нежны, это мой первый раз ;-)
Джим