如何对采用参数的方法进行单元测试

时间:2016-08-11 13:48:16

标签: unit-testing language-agnostic tdd

假设我有一个someMethod,其中Stringint任何其他类型作为输入。

当我想为这个someMethod编写单元测试时,我是用自己给定的String和Int填充方法然后通过我的测试运行它?这不会让我的测试依赖于我的输入吗?

大概他们的值(字符串和int输入)来自另一个函数,我应该对该函数进行单独的单元测试吗?

2 个答案:

答案 0 :(得分:3)

仅依赖于其输入参数(而非全局/实例状态)及其输出返回值的函数(或方法)实际上是要测试的最简单。他们被称为pure functions。在“纯”函数中存在尽可能多的代码变得越来越受欢迎,因为它们是多么容易测试。

您为他们提供示例输入(来自硬编码值,模拟框架,测试数据库等),并将输出与预期进行比较。

另一方面,在测试中处理非纯函数/方法要困难得多。您需要将实例的状态设置为特定的前提条件,调用要测试的方法,然后在突变后测试实例。这是一个更长的过程。

答案 1 :(得分:1)

单元测试主要用于测试接口,您已为代码定义了行为,并且您正在测试这些行为。例如,您有一组用String大写的代码。您将传递几组不同的文本并验证它们是否有效:

Input | Expected Output | Rationale
-------------------------------
test  | TEST            | all lower
Test  | TEST            | initial caps
tEst  | TEST            | middle caps
tesT  | TEST            | last caps
foo   | FOO             | checking different string
1foo  | 1FOO            | mixed string

等...

是的,您应该对您的单元测试进行全面测试,并尝试尽可能多地覆盖代码。您可以测试单个函数,但测试对象,协议和重要独立函数的接口更为重要。这就是为什么它被称为单元测试,你正在测试一个块或代码单元 - 而不是单个部分。