【发布时间】:2017-07-31 16:12:33
【问题描述】:
我有测试字符串是否为 GUID 的扩展方法。
public static bool IsGuid(this string str)
{
if(str == null)
throw new ArgumentNullException(str, "Argument can not be NULL");
Guid guidFromString;
return Guid.TryParse(str, out guidFromString);
}
我想通过 xUnit 和 Theory 对其进行测试。
对于字符串,它正在工作:
[Theory, InlineData(""), InlineData(" ")]
public void IsGuid_EmptyOrWhiteSpace_ShouldReturnFalse(string str)
{
// Arrange
bool result;
// Act
result = str.IsGuid();
// Assert
Assert.False(result);
}
但是我怎样才能为Guids 数组做到这一点?我需要测试Guid.Empty' andGuid.NewGuid`。
这不起作用:
[Theory, MemberData(nameof(Guids))]
public void IsGuid_EmptyOrValidGuid_ShouldReturnTrue(string str)
{
// Arrange
bool result;
// Act
result = str.IsGuid();
// Assert
Assert.False(result);
}
public static IEnumerable<string> Guids
{
get
{
yield return Guid.Empty.ToString();
yield return Guid.NewGuid().ToString();
}
}
@编辑 测试失败,因为
System.ArgumentException
Property Guids on ExtensionsLibraryTests.StringExtensions.xUnitStringExtensionsTests yielded an item that is not an object[]
at Xunit.MemberDataAttribute.ConvertDataItem(MethodInfo testMethod, Object item)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Xunit.Sdk.XunitTheoryTestCaseRunner.<AfterTestCaseStartingAsync>d__7.MoveNext()
【问题讨论】:
-
嘿..也许只是
yield return Guid.NewGuid().ToString();返回了一个有效的GUID,而您的测试有Assert.False?要让这段代码与前一段代码 (InlineData(""), InlineData(" ")) 相同,您应该使用yield return ""; yield return " ";而不是有效的 Guid 字符串.. -
固定 AAA 部分 :)
-
可能重复:stackoverflow.com/questions/22093843/…(抱歉,我不能重复投票,因为我撤消了之前的“不清楚”投票..)