FsCheckには、テストデータを生成するためのいくつかのきちんとしたデフォルトのArbitrary
タイプがあります。しかし、私の試験日のうちの1つが別のものに依存するとどうなりますか?例えばFsCheck:他のテストデータに依存するテストデータの生成方法?
、結果のストリングが長い入力文字列よりなることはありませんことをstring.Substring()
の性質を考慮してください。
[Fact]
public void SubstringIsNeverLongerThanInputString()
{
Prop.ForAll(
Arb.Default.NonEmptyString(),
Arb.Default.PositiveInt(),
(input, length) => input.Get.Substring(0, length.Get).Length <= input.Get.Length
).QuickCheckThrowOnFailure();
}
ので、最終的にPositiveInt
意志Substring
の実装は確かに、このプロパティは失敗し、正しいですが、 genereated NonEmptyString
よりも長いものが生成され、例外が発生します。
Shrunk:NonEmptyString "a" PositiveInt 2例外:System.ArgumentOutOfRangeException:インデックスと長さは、文字列内の場所を参照する必要があります。
私はif (input.Length < length) return true;
との比較を守ることができましたが、そのようにしても、多くのテストを実行するとそのプロパティはチェックされませんでした。
入力文字列を超えないPositiveInt
を生成するようにFsCheckに指示するにはどうすればよいですか?私はGen<T>
クラスを使用する必要が推測、それはインターフェイスですが、私には混乱だけヘラです...私は次のことを試してみましたが、それでも文字列を超えるPositiveInt
Sを得た:
var inputs = Arb.Default.NonEmptyString();
// I have no idea what I'm doing here...
var lengths = inputs.Generator.Select(s => s.Get.Length).ToArbitrary();
Prop.ForAll(
inputs,
lengths,
(input, length) => input.Get.Substring(0, length).Length <= input.Get.Length
).QuickCheckThrowOnFailure();
https://fscheck.github.io/FsCheck/TestData.html – MethodMan
私はすでに、このサイトを通じて複数回を見て、まだ私が欲しいものを行う方法を見つけ出すことができませんでした。 –