Опитвам се да използвам командата yield, за да актуализирам някои методи, но се натъквам на проблем, който не разбирам. Има известна логика в този метод (проверка за тип null), ако случаят е такъв, тогава пиша в журнал и прекъсвам добива. Което прави точно това, което искам, но в моя модулен тест се казва, че функцията за журнал никога не е била извикана. Добре съм да не влизам в тази ситуация, но искам да знам защо не мога или дали правя нещо нередно.
Ето кода:
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