作为基于测试的开发的新手,这个问题一直困扰着我.多少是太多了?应该测试什么,应该如何测试,以及为什么要进行测试?给出的例子是在C#中使用NUnit,但我认为问题本身与语言无关.
以下是我自己的两个当前示例,对通用列表对象进行测试(使用字符串进行测试,初始化函数添加三个项目{"Foo", "Bar", "Baz"}
):
[Test] public void CountChanging() { Assert.That(_list.Count, Is.EqualTo(3)); _list.Add("Qux"); Assert.That(_list.Count, Is.EqualTo(4)); _list[7] = "Quuuux"; Assert.That(_list.Count, Is.EqualTo(8)); _list.Remove("Quuuux"); Assert.That(_list.Count, Is.EqualTo(7)); } [Test] public void ContainsItem() { Assert.That(_list.Contains("Qux"), Is.EqualTo(false)); _list.Add("Qux"); Assert.That(_list.Contains("Qux"), Is.EqualTo(true)); _list.Remove("Qux"); Assert.That(_list.Contains("Qux"), Is.EqualTo(false)); }
代码是相当自我评论的,所以我不会深入研究正在发生的事情,但这种事情是否过于遥远?Add()
并且Remove()
当然是单独测试的,那么我应该用这些类型的测试达到什么水平?我应该进行这类测试吗?
我会说你实际测试的是等价类.在我看来,添加到包含3个项目或7个项目的列表之间没有区别.但是,0项,1项和> 1项之间存在差异.对于这些案例,我最初可能会有3个测试用于添加/删除方法.
一旦错误开始从QA /用户进入,我会将每个这样的错误报告添加为测试用例; 通过红条看到错误的重现; 通过获得绿色条来修复错误.每个这样的'错误检测'测试都可以保留 - 这是我的安全网(阅读:回归测试),即使我再次犯这个错误,我也会得到即时反馈.
将您的测试视为规范.如果您的系统在没有测试失败的情况下可能中断(或存在重大错误),那么您没有足够的测试覆盖率.如果一个单点故障导致许多测试中断,则可能有太多(或者耦合太紧).
这很难以客观的方式定义.我想我会在测试方面说错了.然后,当测试开始惹恼你时,那些是重构/重新调整的特定测试(因为它们太脆弱,或者测试错误的东西,并且它们的失败没有用).