私は pex に関する多くの論文を読んでおり、探査戦略に焦点を当てています。Fitnex 戦略がデフォルトで使用されることは理解していますが、Pex が最初のパラメーター化された単体テストを作成する方法がわかりません。
この情報はどこで確認できますか?
実験的テストでは、次のように思います:-パラメーターが「int」の場合は0で始まります-パラメーターが「bool」の場合はfalseで始まります-パラメーターがオブジェクトの場合はNullで始まります
それが正しいか ?
Fitnex の戦略とソルバーの制約 Z3 について、繰り返しによって解決できる制約は 1 つだけだと思います。
次のメソッドがあるとします。
public void branchOverTests(bool a, bool b)
{
1 if (a)
{
2 Console.WriteLine("B1");
}
else
{
3 Console.WriteLine("B2");
}
4 if (b)
{
5 Console.WriteLine("B3");
}
else
{
6 Console.WriteLine("B4");
}
}
数字は行を識別し、Pex は 3 つのテストを生成します。
--- Test 1
branchOverTests(a=false,b=false)
Path: 1F 3T 4F 6T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false && b == false;
--- Test 2
branchOverTests(a=false,b=true)
Path: 1F 3T 4T 5T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && a == false;
return target != (ClassMethod)null && b != false && a == false;
Note: From Test 1 Flipped last branch:
return target != (ClassMethod)null && a == false && b == false;
-> return target != (ClassMethod)null && b != false && a == false;
=> b = true
--- Test 3
branchOverTests(a=true,b=false)
Path: 1T 2T 4F 6T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false && b == false;
Note: From Test 2 Resolve second condition of last branch:
return return target != (ClassMethod)null && b != false && a == false;
-> return target != (ClassMethod)null && a != false && b == false;
=> a = true
=> return target != (ClassMethod)null && a != false;
=> return target != (ClassMethod)null && a != false;
しかし、パラメータ化されたテストの最も効率的なセットは次のとおりです。
branchOverTests(a=false,b=false)
branchOverTests(a=true,b=true)
テスト 1 の後:
return target != (ClassMethod)null && a == false;
-> return target != (ClassMethod)null && a != false;
=> a = true
=> return target != (ClassMethod)null && a != false && b != false;
=> b = true
理想的なテスト 2 :
branchOverTests(a=true,b=true)
Path: 1T 2T 4T 5T
return target != (ClassMethod)null;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false;
return target != (ClassMethod)null && a != false && b != false;
それは私が正しいと思いますか?
感謝をこめて。