代码之家  ›  专栏  ›  技术社区  ›  Eduardo Rascon

如何轻松地测试代码?

  •  5
  • Eduardo Rascon  · 技术社区  · 14 年前

    7 回复  |  直到 14 年前
        1
  •  2
  •   djna    14 年前

    我们所说的代码是什么意思?当单元测试时,我认为我们在这里讨论的是,我们在测试特定的方法和类。

    知道我想要什么

    换句话说,您正在调查某个代码是否满足契约。考虑这个例子:

     int getInvestvalue( int depositCents, double annualInterestRate, int years) {
    
     }
    

      deposit 100, rate 5.0, years 1 : expected answer 105
      deposit 100, rate 0, years 1 : expected answer 100
      deposit 100, rate 10, years 0 : expected anwer 100
    

    还有什么?负利率怎么样?

    接下来的问题是:我们如何找出这些测试用例。我不认为有一个单一的方法可以构建一个全面的集合,但这里有几点需要考虑:

    1. 角案例:边的组合。在我的例子中,这是一个很大的比率和大量的年数。挑选这些是一门艺术,这得益于我们对实施的了解:在这里,我们知道利率和年限之间存在“乘数”效应。
    2. 白盒:使用实现知识来提高代码覆盖率。调整输入以强制代码沿着特定路径运行。例如,如果yoiu知道代码有一个“if负速率”条件路径,那么这就是包含负速率测试的线索。
        2
  •  4
  •   gbjbaanb    14 年前

    没错-你知道该期待什么,并编写测试用例来涵盖这些知识。在许多方面,这是正常的-你想测试你写的东西,只是为了让你知道它的工作正如你所期望的。

    然后你需要把它交给其他人来测试你-他们会很快找到你从未想过的东西。

    这就是软件的工作方式,也可能是它从未完成的原因。

    你的测试代码有一点比什么都重要——一旦你做了一次,发现它能按预期工作,你可以添加更多的东西到你的应用程序,然后再次运行你的测试代码,以确保它仍能按预期工作。这叫做回归测试,我认为这是编写自己的单元测试的唯一原因。

    以及: Dilbert's take on testing .

        3
  •  1
  •   Ben Hoffstein    14 年前

    “测试驱动开发”的原则之一是先编写测试(即在编写代码之前)。显然,这个测试一开始会失败(你的程序甚至可能无法编译)。如果测试

    另外,一些更流行的单元测试框架(如jUnit)将允许您测试某些东西是否工作或显式不工作(即,您可以断言抛出了某种类型的异常)。这对于检查错误输入、转角情况等非常有用。

    要从stephencovey那里偷一句话,只需从结尾开始,并编写尽可能多的测试。这对于非常简单的代码来说似乎微不足道,但是当您处理更复杂的问题时,这个想法会变得很有用。

        4
  •  1
  •   Holystream    14 年前

    这个网站有很多测试代码的帮助资源。 SoftwareTestingHelp

        5
  •  1
  •   StriplingWarrior    14 年前

    一旦编写了代码以便可以根据依赖关系和输入参数预见可能发生的情况,就应该编写测试,从各种可预见的情况中寻找正确的行为。我发现单元测试最大的优点之一是它实际上迫使我思考“如果……”,并找出每种情况下的正确行为。例如,我必须决定在出现某些错误时抛出异常还是返回空值更有意义。

    一旦你认为你已经覆盖了所有的基础,你可能还想把你的代码扔到一个工具上,比如 QuickCheck 帮助您识别可能错过的可能性。

        6
  •  0
  •   duffymo    14 年前

    测试驱动器

    不,你应该写信 JUnit TestNG 测验。

        7
  •  0
  •   Chris Knight    14 年前

    做得正确,你的测试就是你的规格。它定义了代码应该做什么。每个测试都定义了应用程序的一个新方面。因此,您永远不会编写测试来寻找无法正常工作的东西,因为您的测试指定了如何处理这些东西 正确工作。

    一旦你认为你已经完成了单元测试和编码你的组件,最好最简单的方法之一就是使用一种叫做 Exploratory Testing ,这可以被认为是对您编写的应用程序部分的无脚本探索,基于您的直觉和经验(以及越轨行为!)查找bug。

    Pair Programming