Nunit 测试命名约定示例
Nunit Test naming convention sample
开始编程,我在看一些单元测试命名约定:这是一个流行的。
MethodName_StateUnderTest_ExpectedBehavior
https://dzone.com/articles/7-popular-unit-test-naming
如果我有 Class ParseVendorSupply,
我会给第一个单元测试起什么名字?
FromCsv_ParseCorrectly_IsGood
我会给第二个单元测试起什么名字?
FromCsv_ParseCorrectly_IsIncorrect
//Electronics store
public class ParseVendorSupply
{
public VendorSupply FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
VendorSupply vendorsupply = new VendorSupply();
vendorsupply.VendorId = Convert.ToInt16(values[0]);
vendorsupply.ProductId = Convert.ToInt16(values[1]);
vendorsupply.Quantity = Convert.ToInt16(values[2]);
return vendorsupply;
}
}
public class ParseVendorSupplyTest
{
ParseVendorSupply parseVendorSupplytest = new ParseVendorSupply();
[Test]
public void FromCsv_ParseCorrectly_IsGood()
{
string csvLineTest = "5,8,3";
VendorSupply vendorsupply = parseVendorSupplytest.FromCsv(csvLineTest);
Assert.AreEqual(5, vendorsupply.VendorId);
Assert.AreEqual(8, vendorsupply.ProductId);
Assert.AreEqual(3, vendorsupply.Quantity);
}
[Test]
public void FromCsv_ParseCorrectly_IsIncorrect()
{
string csvLineTest = "5,testdatatype,3,testextrawords";
VendorSupply vendorsupply = parseVendorSupplytest.FromCsv(csvLineTest);
Assert.AreEqual(5, vendorsupply.VendorId);
}
}
你做的非常好。 (我将在下面提出一个建议。)
如前所述,这里有很大的意见空间。但这让我得出了这个答案......
制定一个让需要理解它的人清楚易懂的约定。那就是你和任何从事代码工作的队友。没有其他人需要同意。但是,想想你的 "future self" 也想了解。
另外,如果你决定改变,那就去做吧。如果您已经使它易于理解,则不需要跨文件保持一致性。所以不要为了一致性而返回并更改其他文件。不要制定规则,而是根据您自己的个人行为创建模式。
关于您暂时采用的约定的一点。您似乎在使第二个和第三个组成部分大致相同。如果是这样,它们就是多余的,您不应该同时使用两者。或者,使第二个成为导致第三个结果的条件。例如
FromCsv_WhenWellFormed_ParsesCorrectly()
FromCsv_WhenBadlyFormed_GivesError()
但是,如果是我,我可能会完全放弃第三部分,因为当数据格式正确或错误时,结果应该是什么是显而易见的。
如果需要,您可以使用不同的名称进行多个格式错误(甚至格式正确)的测试。或者,在提供数据作为参数的测试用例中进行正确和不正确的测试。
开始编程,我在看一些单元测试命名约定:这是一个流行的。 MethodName_StateUnderTest_ExpectedBehavior
https://dzone.com/articles/7-popular-unit-test-naming
如果我有 Class ParseVendorSupply,
我会给第一个单元测试起什么名字? FromCsv_ParseCorrectly_IsGood
我会给第二个单元测试起什么名字? FromCsv_ParseCorrectly_IsIncorrect
//Electronics store
public class ParseVendorSupply
{
public VendorSupply FromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
VendorSupply vendorsupply = new VendorSupply();
vendorsupply.VendorId = Convert.ToInt16(values[0]);
vendorsupply.ProductId = Convert.ToInt16(values[1]);
vendorsupply.Quantity = Convert.ToInt16(values[2]);
return vendorsupply;
}
}
public class ParseVendorSupplyTest
{
ParseVendorSupply parseVendorSupplytest = new ParseVendorSupply();
[Test]
public void FromCsv_ParseCorrectly_IsGood()
{
string csvLineTest = "5,8,3";
VendorSupply vendorsupply = parseVendorSupplytest.FromCsv(csvLineTest);
Assert.AreEqual(5, vendorsupply.VendorId);
Assert.AreEqual(8, vendorsupply.ProductId);
Assert.AreEqual(3, vendorsupply.Quantity);
}
[Test]
public void FromCsv_ParseCorrectly_IsIncorrect()
{
string csvLineTest = "5,testdatatype,3,testextrawords";
VendorSupply vendorsupply = parseVendorSupplytest.FromCsv(csvLineTest);
Assert.AreEqual(5, vendorsupply.VendorId);
}
}
你做的非常好。 (我将在下面提出一个建议。)
如前所述,这里有很大的意见空间。但这让我得出了这个答案......
制定一个让需要理解它的人清楚易懂的约定。那就是你和任何从事代码工作的队友。没有其他人需要同意。但是,想想你的 "future self" 也想了解。
另外,如果你决定改变,那就去做吧。如果您已经使它易于理解,则不需要跨文件保持一致性。所以不要为了一致性而返回并更改其他文件。不要制定规则,而是根据您自己的个人行为创建模式。
关于您暂时采用的约定的一点。您似乎在使第二个和第三个组成部分大致相同。如果是这样,它们就是多余的,您不应该同时使用两者。或者,使第二个成为导致第三个结果的条件。例如
FromCsv_WhenWellFormed_ParsesCorrectly()
FromCsv_WhenBadlyFormed_GivesError()
但是,如果是我,我可能会完全放弃第三部分,因为当数据格式正确或错误时,结果应该是什么是显而易见的。
如果需要,您可以使用不同的名称进行多个格式错误(甚至格式正确)的测试。或者,在提供数据作为参数的测试用例中进行正确和不正确的测试。