Поза Шим: тест проходит бесконечно - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать позу (см. 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) в тестируемом коде иметь обратный вызов для модульного теста, чтобы перевернуть сохраненный флаг.

Тест выполняется на несколько минут, после чего прерывается из-за переполнения стека.

Есть какие-нибудь указатели на то, что я ошибаюсь?

...