如何对带参数的方法进行单元测试
How to do unit testing for methods that take parameters
假设我有一个 someMethod
,它接受 String
和 int
或 任何其他类型 作为输入。
当我想为此 someMethod
编写单元测试时,是否要使用我自己给定的 String 和 Int 填充该方法,然后 运行 通过我的测试?这不会让我的测试依赖于我的输入吗?
并且大概它们的值(字符串和 int 输入)来自另一个函数,我也应该对该函数进行单独的单元测试,对吗?
单元测试主要用于测试接口,您已经为代码定义了行为并且正在测试这些行为。例如,您有一组代码将 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
等...
是的,您应该使您的单元测试全面并尝试覆盖尽可能多的代码。您可以测试单个函数,但更重要的是测试对象、协议和重要的独立函数的接口。这就是它被称为单元测试的原因,您正在测试一个代码块或单元 - 而不是单个片段。
仅依赖于输入参数(而不是 global/instance 状态)和输出 return 值的函数(或方法)实际上是 最简单的 进行测试。他们被称为 pure functions。努力在 "pure" 函数中存在尽可能多的代码正变得越来越流行,因为它们很容易测试。
你给他们样本输入(来自硬编码值、模拟框架、测试数据库等),然后将输出与你的预期进行比较。
另一方面,在测试中处理非纯 functions/methods 要困难得多。您需要将实例的状态设置为特定的前提条件,调用要测试的方法,然后在变异后测试实例。这是一个更长的过程。
假设我有一个 someMethod
,它接受 String
和 int
或 任何其他类型 作为输入。
当我想为此 someMethod
编写单元测试时,是否要使用我自己给定的 String 和 Int 填充该方法,然后 运行 通过我的测试?这不会让我的测试依赖于我的输入吗?
并且大概它们的值(字符串和 int 输入)来自另一个函数,我也应该对该函数进行单独的单元测试,对吗?
单元测试主要用于测试接口,您已经为代码定义了行为并且正在测试这些行为。例如,您有一组代码将 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
等...
是的,您应该使您的单元测试全面并尝试覆盖尽可能多的代码。您可以测试单个函数,但更重要的是测试对象、协议和重要的独立函数的接口。这就是它被称为单元测试的原因,您正在测试一个代码块或单元 - 而不是单个片段。
仅依赖于输入参数(而不是 global/instance 状态)和输出 return 值的函数(或方法)实际上是 最简单的 进行测试。他们被称为 pure functions。努力在 "pure" 函数中存在尽可能多的代码正变得越来越流行,因为它们很容易测试。
你给他们样本输入(来自硬编码值、模拟框架、测试数据库等),然后将输出与你的预期进行比较。
另一方面,在测试中处理非纯 functions/methods 要困难得多。您需要将实例的状态设置为特定的前提条件,调用要测试的方法,然后在变异后测试实例。这是一个更长的过程。