Насмешливая пока петля - PullRequest
0 голосов
/ 19 мая 2018

Мне нужно смоделировать цикл while для запуска только один раз, однако мои настройки заставляют его работать бесконечно, так как я думаю, что он всегда возвращает true.

Мои настройки:

var loginName = "12345";

cacheRepository.Setup(m => m.AddString(string.Format("{0}_{1}", Resources.ResetCodeCacheKey, randomCode), loginName)).Returns(true);

Хотяloop in method:

while (_cacheRepository.AddString(string.Format("{0}_{1}", Resources.ResetCodeCacheKey, code), userLoginName))
{
    //.........
}

Добавление реализации String:

public virtual bool AddString(string key, string value)
{
    if (!ExistsKey(key))
    {
        Cache.AddString(key, value);
        return true;
    }
    return false;
}

Как настроить метод так, чтобы он возвращал true только один раз?Будет полезен фрагмент кода. Спасибо за просмотр.

1 Ответ

0 голосов
/ 19 мая 2018

Используйте SetupSequence, чтобы настроить смоделированный элемент для возврата желаемых результатов.

Например, скажем, у вас есть следующий интерфейс

public interface IInterface {
    bool AddString(string key, string value);
}

Настройка будет выглядеть как

var cacheRepository = new Mock<IInterface>();
cacheRepository
    .SetupSequence(m => m.AddString(It.IsAny<string>(), It.IsAny<string>()))
    .Returns(true)
    .Returns(false);

Когда вызываемый член вызывается в первый раз, он вернет true, а затем false во второй раз.

Ссылка Быстрый запуск Moq , чтобы лучше понятькак использовать макетную среду.

Настройка члена для возврата различных значений / исключений при последовательных вызовах:

var mock = new Mock<IFoo>();
mock.SetupSequence(f => f.GetCount())
    .Returns(3)  // will be returned on 1st invocation
    .Returns(2)  // will be returned on 2nd invocation
    .Returns(1)  // will be returned on 3rd invocation
    .Returns(0)  // will be returned on 4th invocation
    .Throws(new InvalidOperationException());  // will be thrown on 5th invocation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...