对不存在的Id进行单元测试是否有意义

时间:2012-03-09 21:38:40

标签: c# unit-testing integration-testing

将不存在的唯一ID传递给我的GetXX方法以期望创建的列表没有任何计数是否有意义?我的意思是,当我测试现有的Id时,List的创建与它所拥有的项目数无关。如果我传递不存在的ID,为什么列表应为null或没有count == 0?我不确定这个测试的意义。

[Test]
public void Get_Teststeps_By_UnitId_Not_Existing()
{
    // ARRANGE
    ITeststepDataProvider provider = new TeststepDataProvider(_connectionString);
    int unitId = 100;

    // ACT
    List<Teststep> units = provider.GetTeststepsByUnitId(unitId);

    // ASSERT
    Assert.IsNotNull(units);
    Assert.Count(0, units);
}

4 个答案:

答案 0 :(得分:1)

我认为否定测试是一个有效的测试。它是否应该具有0的计数而不是null我想是由应用程序尝试完成的。但是,作为一项规则,您希望测试负面案例与正面案例一样多。

答案 1 :(得分:1)

单元测试不仅仅 以验证现在的GetXX方法(尽管测试该方法是否符合您认为的方法,即使它确实如此,也从未受到伤害。很简单),它还可以让任何人在以后更改/重构代码时不会意外地更改使您的其他代码中断的内容。如果你依赖某种行为,你应该总是确保对它进行测试,无论多么简单。

换句话说,不要跳过测试,因为它现在没有意义,考虑以后的维护,并且测试实际上为方法的用户提供了关于方法的良好文档是假设使用和/或不使用。

答案 2 :(得分:1)

如果您的代码调用总是希望GetXX()返回List的实例,那么您应该对其进行测试。这样可以确保有人无法更改GetXX()代码并让其返回null,然后在系统中生成NullReferenceException

答案 3 :(得分:0)

这在很大程度上取决于被测系统,它应该做什么以及如何定义。例如,如果你定义了你正在测试的方法永远不会返回空值但是对于某些给定输入的空集合(例如非现有的ids - 无论这意味着什么)那么测试这种情况和正确的行为是完全合理的。方法