Hranice průzkumu
Pex Nastavení AttributeBase je abstraktní základní třída pro nastavení vazby jako atributy. Přehled nastavení v IntelliTestu najdete v tématu Nastavení Vodopád.
Nastavení můžete upravit pomocí pojmenovaných vlastností tohoto a jeho odvozených atributů:
[PexClass(MaxRuns = 10)]
public partial class FooTest {...}
- Omezení řešení mezí
- MaxConstraintSolverTime – počet sekund, po které musí řešitel omezení zjistit vstupy, které způsobí, že bude následovat nová a jiná cesta provádění.
- MaxConstraintSolverMemory – velikost v megabajtech, které řešitel omezení může použít ke zjišťování vstupů.
- Hranice cesty průzkumu
- MaxBranches – maximální počet větví, které mohou být převzaty po jedné cestě provádění.
- MaxCalls – maximální počet volání, která lze provést během jedné cesty provádění.
- MaxStack – maximální velikost zásobníku kdykoli během jedné cesty provádění měřená jako počet aktivních volání rámců.
- MaxConditions – maximální počet podmínek u vstupů, které je možné zkontrolovat během jedné cesty provádění.
- Hranice průzkumu
- MaxRuns – maximální počet spuštění, která se budou během průzkumu pokoušet.
- MaxRunsWithoutNewTests – maximální počet po sobě jdoucích spuštění bez vygenerování nového testu.
- MaxRunsWithUniquePaths – maximální počet spuštění s jedinečnými cestami spuštění, které se budou pokoušet během průzkumu.
- MaxExceptions – maximální počet výjimek, které mohou být nalezeny pro kombinaci všech zjištěných cest provádění.
- Nastavení generování kódu sady Testů
- TestExcludePathBoundsExceeded - Pokud true, cesty provádění, které překračují libovolnou hranici cesty (MaxCalls, MaxBranches, MaxStack, MaxConditions) jsou ignorovány.
- TestEmissionFilter – označuje, za jakých okolností má IntelliTest generovat testy.
- TestEmissionBranchHits – určuje, kolik testů IntelliTest generuje.
MaxConstraintSolverTime
Počet sekund, po které musí řešitel omezení vypočítat vstupy, které způsobí, že bude přijata nová a jiná cesta provádění. Toto je možnost Pex Nastavení AttributeBase a jeho odvozených typů.
Čím hlouběji IntelliTest zkoumá cesty provádění programu, tím složitější systémy omezení, které IntelliTest vytváří z toku řízení a toku dat programu, se stanou. V závislosti na časovém omezení můžete tuto hodnotu nastavit tak, aby IntelliTest trvalo více nebo méně času zjišťování nových cest spuštění.
Důvodem časového limitu je obvykle to, že IntelliTest se snaží najít řešení pro systém omezení, který řešení nemá, ale o tomto faktu neví. Vzhledem k tomu, že se jedná o nejběžnější případ vypršení časového limitu, nemusí být vhodné zvýšit mez.
MaxConstraintSolverMemory
Počet megabajtů, které musí řešitel omezení vypočítat vstupy, které způsobí, že bude přijata nová a jiná cesta provádění. Toto je možnost vrcholu Nastavení AttributeBase* a jeho odvozených typů.
Čím hlouběji IntelliTest zkoumá cesty provádění programu, tím složitější systémy omezení, které IntelliTest vytváří z toku řízení a toku dat programu, se stanou. V závislosti na dostupné paměti počítače můžete tuto hodnotu nastavit tak, aby IntelliTest mohl řešit složitější systémy omezení.
Důvodem časového limitu je obvykle to, že IntelliTest se snaží najít řešení pro systém omezení, který řešení nemá, ale o tomto faktu neví. Vzhledem k tomu, že se jedná o nejběžnější příčinu situace mimo paměť, nemusí dávat smysl zvýšit mez.
MaxBranches
Maximální počet větví, které mohou být převzaty po jedné cestě provádění.
Motivací za touto vazbou průzkumu je omezit délku jakékoli cesty provádění, kterou IntelliTest zkoumá během generování vstupu. Konkrétně brání tomu, aby IntelliTest nereaguje, pokud program přejde do nekonečné smyčky.
Každá podmíněná a nepodmíněná větev spuštěného a monitorovaného kódu se počítá do tohoto limitu, včetně větví, které nezávisí na vstupech parametrizovaného testu.
Například následující kód využívá větve v objednávce 100:
for (int i=0; i<100; i++) { }
MaxCalls
Maximální počet volání, která lze provést během jedné cesty provádění.
Motivací za touto vazbou průzkumu je omezit délku jakékoli cesty provádění, kterou IntelliTest zkoumá během generování vstupu. Konkrétně brání tomu, aby IntelliTest nereagoval, pokud program volá metodu rekurzivně nekonečně kolikrát, což by způsobilo přetečení zásobníku, ze kterého se IntelliTest nemůže zotavit.
Každé volání (přímé, nepřímé, virtuální, přeskočení) spuštěného a monitorovaného kódu se počítá do tohoto limitu.
MaxStack
Maximální velikost zásobníku kdykoli během jedné cesty provádění měřená počtem aktivních rámců volání.
Motivací za touto vazbou průzkumu je omezit velikost zásobníku jakékoli cesty provádění, kterou IntelliTest zkoumá během generování vstupu. Konkrétně brání IntelliTestu v používání veškerého dostupného prostoru zásobníku, což by způsobilo přetečení zásobníku, ze kterého se IntelliTest nemůže zotavit.
MaxConditions
Maximální počet podmínek pro vstupy, které mohou být kontrolovány během jedné cesty provádění.
Motivací tohoto zkoumání je omezit složitost jakékoli cesty provádění, kterou IntelliTest zkoumá během generování vstupu. Každá podmíněná větev, která závisí na vstupech parametrizovaného testu, se počítá do tohoto limitu.
Každá cesta v následujícím kódu například využívá podmínky n+1:
[PexMethod]
void ParameterizedTest(int n)
{
for (int i=0; i<n; i++) { // conditions are "0<n", "1<n", ..., "!(n<n)"
...
}
for (int i=0; i<100; i++) { // irrelevant for MaxConditions, since conditions do not depend on input
...
}
}
MaxRuns
Maximální počet spuštění, která IntelliTest vyzkouší během zkoumání testu.
Motivací za touto vazbou průzkumu je, že jakýkoli kód, který obsahuje smyčky nebo rekurzi, může mít neomezený počet cest provádění, a proto musí být IntelliTest během generování vstupu omezen.
Dvě nastavení MaxRuns a MaxRunsWithUniquePaths souvisí takto:
- IntelliTest bude volat parametrizovanou testovací metodu až do MaxRuns krát s různými testovacími vstupy.
- Pokud je spuštěný kód deterministický, IntelliTest bude pokaždé trvat jinou cestu spuštění. Za určitých podmínek však spuštěný kód může postupovat podle cesty provádění, kterou už dříve provedl, s různými vstupy.
- IntelliTest spočítá, kolik jedinečných cest provádění najde; toto číslo je omezeno možností MaxRunsWithUniquePaths .
MaxRunsWithoutNewTests
Maximální počet po sobě jdoucích spuštění bez vygenerování nového testu.
I když IntelliTest dokáže často během krátké doby najít mnoho zajímavých testovacích vstupů, po určité době nenajde žádné další nové testovací vstupy a nevysílají žádné další testy jednotek. Tato možnost konfigurace umístí vazbu na počet po sobě jdoucích pokusů, které IntelliTest může provést bez generování nového testu. Po dosažení se průzkum zastaví.
MaxRunsWithUniquePaths
Maximální počet jedinečných cest, které Bude IntelliTest během zkoumání zvažovat.
Motivací za touto vazbou průzkumu je, že jakýkoli kód obsahující smyčky nebo rekurze může mít neomezený počet cest spuštění, a proto musí být IntelliTest během generování vstupu omezený.
Dvě nastavení MaxRuns a MaxRunsWithUniquePaths souvisí takto:
- IntelliTest bude volat parametrizovanou testovací metodu až do MaxRuns krát s různými testovacími vstupy.
- Pokud je spuštěný kód deterministický, IntelliTest bude pokaždé trvat jinou cestu spuštění. Za určitých podmínek však spuštěný kód může postupovat podle cesty provádění, kterou už dříve provedl, s různými vstupy.
- IntelliTest spočítá, kolik jedinečných cest provádění najde; toto číslo je omezeno možností MaxRunsWithUniquePaths .
MaxExceptions
Maximální počet výjimek, ke kterým může dojít před zastavením průzkumu.
Motivací za touto vazbou průzkumu je zastavit zkoumání kódu, který obsahuje mnoho chyb. Pokud IntelliTest najde v kódu příliš mnoho chyb, průzkum se zastaví.
TestExcludePathBoundsExceeded
Cesty provádění, které překračují nakonfigurované hranice cesty MaxCalls, MaxBranches, MaxStack a MaxConditions , se ignorují.
Motivací za touto vazbou průzkumu je zabývat se (s největší pravděpodobností) neukončujícími testy. Když IntelliTest dosáhne hranice průzkumu, jako je MaxCalls, MaxBranches, MaxStack nebo MaxConditions, předpokládá, že test nebude ukončovací proces a později nezpůsobí přetečení zásobníku. Takové testovací případy mohou představovat problémy s jinými testovacími architekturami a tento atribut poskytuje způsob, jak zabránit IntelliTestu v generování testovacích případů pro potenciálně neukončující procesy nebo testovací případy, které způsobí přetečení zásobníku.
TestEmissionFilter
Označuje typy testů, které má IntelliTest generovat. Možné hodnoty:
- Vše – Generovat testy pro všechno, včetně porušení předpokladů.
- FailuresAndIncreasedBranchHits (výchozí) – vygenerujte testy pro všechna jedinečná selhání a pokaždé, když testovací případ zvýší pokrytí kontrolovanou testem TestEmissionBranchHits.
- FailuresAndUniquePaths – Generuje testy pro všechna selhání IntelliTest najde a také pro každý vstup testu, který způsobí jedinečnou cestu spuštění.
- Selhání – Generují testy pouze pro selhání.
TestEmissionBranchHits
V závislosti na aktuálním nastavení TestEmissionFilter IntelliTest generuje nové testovací případy, když pokrývají větev v programu, která nebyla dříve pokryta.
Nastavení TestEmissionBranchHits určuje, jestli má IntelliTest pouze zvážit, jestli byla větev vůbec pokryta (TestEmissionBranchHits=1), pokud test probral buď jednou nebo dvakrát (TestEmissionBranchHits=2), a tak dále.
TestEmissionBranchHits=1 vytvoří velmi malou testovací sadu, která pokryje všechny větve IntelliTestu. Konkrétně tato testovací sada bude zahrnovat také všechny základní bloky a příkazy, které dosáhl.
Výchozí hodnota pro tuto možnost je TestEmissionBranchHits=2, která generuje výraznější sadu testů, která je také vhodnější pro detekci budoucích chyb regrese.
Máte zpětnou vazbu?
Své nápady a žádosti o funkce můžete zadávat na webu Developer Community.