Я пытаюсь использовать команду yield для обновления некоторых методов, но столкнулся с проблемой, которую не понимаю. В этом методе есть некоторая логика (проверка типа null), если это так, то я пишу в лог и выдаю break. Что делает именно то, что я хочу, однако в моем модульном тесте говорится, что функция журнала никогда не вызывалась. Я согласен не входить в эту ситуацию, но я хочу знать, почему я не могу или я делаю что-то не так.
Вот код:
public IEnumerable<Ixxx> GetTypes(Type type)
{
if (type == null)
{
log.WriteRecord("log error", "LogName", true);
yield break;
}
lock (blockingObject)
{
foreach (Ixxx item in aDictionary.Values)
{
if (item.Type.Name == type.Name)
{
yield return item;
}
}
}
}
Неудачный модульный тест требует log.WriteRecord никогда не вызывался. Вот этот модульный тест:
[TestMethod]
public void TestMethod()
{
// Arrange
mockLog.Setup(a => a.WriteRecord(It.IsAny<string>(), It.IsAny<string>(), true)).Returns(true);
// Act
sut.GetTypes(null);
// Assert
mockLog.Verify(a => a.WriteRecord(It.IsAny<string>(), It.IsAny<string>(), true), Times.Once());
}
Когда я делал локальную копию (список), этот тест прошел, однако теперь, когда я использую yield, кажется, что я не могу выполнять какие-либо вызовы функций в этом методе? Спасибо за любую помощь!
WriteRecord(string, string, true)
, но в вашем методе вы вызываете перегрузкуWriteRecord(string)
. Вы изменили перегрузку, которую вызывали, когда добавлялиyield
? - person juharr   schedule 12.03.2015mockLog.Setup(a => ...).Returns(true).Verifiable();
- person Erik   schedule 12.03.2015