Nunit测试命名约定示例



开始编程时,我正在研究一些单元测试命名约定:这是一个流行的约定。MethodName_StateUnderTest_ExpectedBehavior

https://dzone.com/articles/7-popular-unit-test-naming

如果我有一个类ParseVendorSupply,

我将如何命名第一个单元测试?来自Csv_ParseCorrectly_IsGood

第二个单元测试的名称是什么?FromCsv_ParseCorrectly_IsCorrect

//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);
}
}

您所做的一切都非常好。(我将在下面提出一个建议。(

如前所述,这里有很大的意见空间。但这让我得出了这个答案。。。

制定一个让需要理解的人清晰易懂的约定。这就是你和任何在代码中工作的队友。没有人需要同意。但同时,想想你想要理解的"未来的自己"。

此外,如果您决定更改,那么就直接执行。如果您已经使其易于理解,则不需要在文件之间保持一致性。因此,不要为了一致性而返回并更改其他文件。不要制定规则,创造出你个人行为所产生的模式。

关于你暂时通过的公约的一点。你似乎在让第二个和第三个组成部分大致相同。如果是这样的话,它们是多余的,你不应该同时使用它们。或者,让第二个是关于产生第三个结果的条件。例如

FromCsv_WhenWellFormed_ParsesCorrectly()
FromCsv_WhenBadlyFormed_GivesError()

然而,如果是我,我可能会完全放弃第三部分,因为很明显,当数据形成良好或糟糕时,结果会是什么。

如果需要,您可以使用不同的名称进行多个格式错误(甚至格式良好(的测试。或者,将正确和不正确的测试作为一个参数提供给测试用例。

最新更新