[英]Not empty string generator with FsCheck using c# fluent interface
我正在嘗試創建一個非空字符串生成器,但是在運行測試時,我仍然有空字符串作為輸入。
這是我寫的代碼:
[Test]
public void MyTest()
{
Func<Gen<string>> generateNotEmptyString = () =>
{
var gen = Any.OfType<string>()
.Where(name => !string.IsNullOrEmpty(name));
return gen;
};
Action<string> assertIdIsNeverEmpty = name =>
{
var id = MyService.CreateId(name);
id.Should().NotBeNullOrEmpty();
};
Spec.For(generateNotEmptyString(), assertIdIsNeverEmpty)
.QuickCheckThrowOnFailure()
}
我正在使用NUnit 2.6.2.12296版,FsCheck 0.9.4.0版和FluentAssertions 3.0.90.0版。
如果我還想修改生成器,使其不創建與正則表達式匹配的空字符串,該怎么辦?
[編輯]這是我用來創建包含字母但不包含特殊字符的字符串的代碼:
private static Gen<NonEmptyString> GenerateValidNames()
{
return
Any.OfType<NonEmptyString>()
.Where(s =>
!s.Get.Contains("\r") &&
!s.Get.Contains("\n") &&
!s.Get.Contains("\t"))
.Where(s =>
{
var regEx = new Regex(@"^[A-Za-z]*$");
return regEx.Match(s.Get).Success;
});
}
也許您有一個bug :)以下對我有用:
public void MyTest()
{
Gen<string> generateNotEmptyString = Any.OfType<string>()
.Where(name => !string.IsNullOrEmpty(name));
Action<string> assertIdIsNeverEmpty = name =>
{
Assert.False(String.IsNullOrEmpty(name));
};
Spec.For(generateNotEmptyString, assertIdIsNeverEmpty)
.QuickCheckThrowOnFailure();
}
注意,生成器周圍不需要多余的Func。 生成器已經是一種功能了,因此,僅創建一個生成器就不會執行任何代碼(或多或少),就像IEnumerable一樣。
或者,使用內置的非空字符串生成器:
Action<NonEmptyString> assertIdIsNeverEmpty = name =>
{
Assert.False(String.IsNullOrEmpty(name.Get));
};
Spec.For(Any.OfType<NonEmptyString>(), assertIdIsNeverEmpty)
.QuickCheckThrowOnFailure();
生成與正則表達式匹配的字符串是一個已解決的問題,但並非一帆風順。 FsCheck當前不直接支持它。 雖然我認為這將是一個很大的補充! 請參閱如何生成與給定正則表達式匹配的隨機字符串?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.