Nunit Test命名约定示例

时间:2018-11-12 01:25:44

标签: c# .net-core nunit

开始编程,我正在查看一些单元测试的命名约定:这是一种流行的约定。 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);

    }
}

1 个答案:

答案 0 :(得分:4)

您正在做的事情非常好。 (我在下面提出一个建议。)

如前所述,这里还有很多意见余地。但这导致我得到这个答案...

制定一个清晰的约定,那些需要了解的约定可以理解。那就是您和所有在代码中工作的队友。没有其他人需要同意。但是,也要考虑一下您也想了解的“未来自我”。

此外,如果您决定更改,则只需进行更改即可。 如果您已经很容易理解,则无需跨文件保持一致性。因此,请勿仅为了保持一致性而返回并更改其他文件。不要制定规则,要创建由您自己的个人行为引起的模式。

关于您暂时采用的约定的一点。您似乎正在使第二和第三部分大致相同。如果是这种情况,它们是多余的,您不应同时使用两者。或者,使第二个与引起第三个结果的条件有关。例如

FromCsv_WhenWellFormed_ParsesCorrectly()
FromCsv_WhenBadlyFormed_GivesError()

但是,如果是我,我可能会完全删除第三部分,因为很明显,当数据格式正确或错误时,结果应该是什么。

如果需要,可以使用不同的名称进行多个格式不正确(甚至格式正确)的测试。或者,将数据作为参数,对测试用例进行正确和错误的测试。