Я пытаюсь использовать позу (см. https://github.com/tonerdo/pose), чтобы подобрать метод экземпляра класса XDocument следующим образом:
Проверяемый код:
/// <exception cref="ArgumentException" />
public void Persist<T>(XDocument document) where T : IEntity
{
if (!HasRegistration(typeof(T))) throw new ArgumentException("oops");
try
{
var filePath = filePaths[typeof(T)];
document.Save(filePath);
}
catch (System.IO.IOException)
{
Thread.Sleep(50);
Persist<T>(document);
throw;
}
catch (Exception)
{
throw;
}
}
Юнит-тест:
[TestMethod()]
public void PersistenceService_Persist_T_Works()
{
var saved = false;
var mockFileSystem = new Mock<IFileSystem>();
mockFileSystem.Setup(T => T.Directory.GetCurrentDirectory()).Returns("");
mockFileSystem.Setup(T => T.Directory.GetParent(It.IsAny<string>())).CallBase();
mockFileSystem.Setup(T => T.Directory.GetParent(It.IsAny<string>()).Parent.FullName).Returns("");
var persister = new PersistenceService(mockFileSystem.Object);
var xDoc = new XDocument();
Shim xDocumentShim = Shim
.Replace(() => xDoc.Save(Is.A<string>()))
.With(delegate (XDocument @this, string s) { saved = true; });
Assert.IsFalse(saved);
persister.Persist<IEducationEntity>(xDoc);
Assert.IsTrue(saved);
}
Мое намерение заключается в том, чтобы при вызове xDoc.Save (string) в тестируемом коде иметь обратный вызов для модульного теста, чтобы перевернуть сохраненный флаг.
Тест выполняется на несколько минут, после чего прерывается из-за переполнения стека.
Есть какие-нибудь указатели на то, что я ошибаюсь?