Может ли тестируемый код в PEX быть ограничен одним методом?Я знаю, что вы можете ограничить его сборками и классами, но как насчет членов?
Я, по сути, пытаюсь достичь 100% покрытия кода для следующего метода:
public virtual bool GetLastSymbol(string symbolHint, out string symbol)
{
if (symbolHint == null)
{
throw new ArgumentNullException("symbolHint");
}
IEnumerable<string> symbols;
symbol = this.VariableHints.TryGetValue(symbolHint, out symbols) ? symbols.Last() : null;
return symbol != null;
}
Следующее PUTдостигает покрытия кода 12/15 , потому что я тестирую только одно из двух возможных значений, которые оно может вернуть:
found = symbolManager.GetLastSymbol(symbolHint, out symbol);
PexAssert.IsFalse(found);
Чтобы получить полное покрытие для этого PUT, мне нужноизмените состояние объекта так, чтобы метод попадал в обе ветви.Я мог бы удовлетворить это, используя отдельные PUT с использованием заводского метода для настройки различных состояний, но это позволило бы мне получить 2 PUT с неполным покрытием кода, а не 1 PUT с полным покрытием.Я понимаю, что в теории 2 PUT будут иметь суммарное покрытие 100%, но мне нужно, чтобы на практике это значение 100% , чтобы я мог правильно настроить CI.
Таким образом, чтобы достичь другой ветви в том же PUT, я должен добавить следующий код к вышеупомянутым 2 строкам:
symbolManager.CreateSymbol(symbolHint); // Ensure next call returns true.
found = symbolManager.GetLastSymbol(symbolHint, out symbol);
PexAssert.IsTrue(found);
Предположительно, покрытие кода для метода GetLastSymbol
теперь составляет 100%, но потому чтоЯ ввел еще один вызов метода для тестируемого типа, теперь покрытие кода уменьшается до 20/29 .
Как ограничить PUT только для измерения покрытия кода для одного метода?Я понимаю, что, возможно, я неправильно понял эту метрику, поэтому, пожалуйста, объясните, почему, если это так:)