开始编程,我正在查看一些单元测试的命名约定:这是一种流行的约定。 MethodName_StateUnderTest_ExpectedBehavior
https://dzone.com/articles/7-popular-unit-test-naming
如果我有一个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);
}
}
答案 0 :(得分:4)
您正在做的事情非常好。 (我在下面提出一个建议。)
如前所述,这里还有很多意见余地。但这导致我得到这个答案...
制定一个清晰的约定,那些需要了解的约定可以理解。那就是您和所有在代码中工作的队友。没有其他人需要同意。但是,也要考虑一下您也想了解的“未来自我”。
此外,如果您决定更改,则只需进行更改即可。 如果您已经很容易理解,则无需跨文件保持一致性。因此,请勿仅为了保持一致性而返回并更改其他文件。不要制定规则,要创建由您自己的个人行为引起的模式。
关于您暂时采用的约定的一点。您似乎正在使第二和第三部分大致相同。如果是这种情况,它们是多余的,您不应同时使用两者。或者,使第二个与引起第三个结果的条件有关。例如
FromCsv_WhenWellFormed_ParsesCorrectly()
FromCsv_WhenBadlyFormed_GivesError()
但是,如果是我,我可能会完全删除第三部分,因为很明显,当数据格式正确或错误时,结果应该是什么。
如果需要,可以使用不同的名称进行多个格式不正确(甚至格式正确)的测试。或者,将数据作为参数,对测试用例进行正确和错误的测试。