【发布时间】:2018-10-17 11:17:13
【问题描述】:
我正在尝试很好地构建我的单元测试,但我不确定拆分测试的最佳方式。我正在使用 C# 和 xUnit。
出于这个问题的目的,我正在测试这个简单的扩展方法代码:
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
我有几个测试选项,但我不知道什么是正确的。我可以写一个事实或理论。
理论 我应该使用理论吗? 一次检测阳性,一次检测阴性?
[Theory, IsUnit]
[InlineData(null)]
[InlineData("")]
public void Test_IsNullOrEmpty_Positive(string value)
{
Assert.True(value.IsNullOrEmpty());
}
[Theory, IsUnit]
[InlineData("TEST")]
[InlineData(" ")]
public void Test_IsNullOrEmpty_Negative(string value)
{
Assert.False(value.IsNullOrEmpty());
}
事实 我应该使用事实吗? 正负合一:
[Fact, IsUnit]
public void Test_IsNullOrEmpty()
{
// Positive testing.
string myString = null;
Assert.True(myString.IsNullOrEmpty());
myString = "";
Assert.True(myString.IsNullOrEmpty());
// Negative testing.
myString = " ";
Assert.False(myString.IsNullOrEmpty());
myString = "TEST";
Assert.False(myString.IsNullOrEmpty());
}
或者我应该进行单一测试:
[Fact, IsUnit]
public void Test_IsNullOrEmpty_Null()
{
string myString = null;
Assert.True(myString.IsNullOrEmpty());
}
[Fact, IsUnit]
public void Test_IsNullOrEmpty_Empty()
{
var myString = "";
Assert.True(myString.IsNullOrEmpty());
}
[Fact, IsUnit]
public void Test_IsNullOrEmpty_Space()
{
var myString = " ";
Assert.False(myString.IsNullOrEmpty());
}
[Fact, IsUnit]
public void Test_IsNullOrEmpty_Word()
{
var myString = "TEST";
Assert.False(myString.IsNullOrEmpty());
}
我没有那么有经验的编写测试并且想遵循最佳实践,所以我只想知道在 C# 和 xUnit 的上下文中,以上哪个是最佳实践(希望对此有规则,而这个问题不是基于意见:-))。
提前感谢您的任何指点!
【问题讨论】:
-
作为初学者做第三个选项。从来没有第二。
-
我认为当你需要检查你的代码是否适用于枚举的每个值时,最好使用理论,这在此处不适用。
标签: c# unit-testing testing xunit xunit.net