Я хотел бы иметь возможность правильно тестировать инициализации класса, используя Moq:
class ClassToTest
{
public ClassToTest()
{
Method1(@"C:\myfile.dat")
}
public virtual void Method1(string filename)
{
// mock this method
File.Create(filename);
}
}
Я думал, что смогу использовать свойство CallBase
для создания тестируемой версии классазатем используйте .Setup()
, чтобы убедиться, что Method1()
не выполняет никакого кода.
Однако создание Mock<ClassToTest>()
не вызывает конструктор, и если бы это произошло, было бы слишком поздноSetup()
!
Если это невозможно, как лучше всего решить проблему при обеспечении правильного поведения конструктора?
РЕДАКТИРОВАТЬ: Чтобы сделать его более понятным,Я добавил параметр к Method1()
, чтобы взять имя файла и добавил немного поведения.Тест, который я хотел бы написать, будет рабочей версией следующего:
[Test]
public void ClassToTest_ShouldCreateFileOnInitialisation()
{
Mock<ClassToTest> mockClass = new Mock<ClassToTest>() { CallBase = true };
mockClass.Setup(x => x.Method1(It.IsAny<string>());
mockClass.Verify(x => x.Method1(@"C:\myfile.dat"));
}