假设我有一个someMethod
,其中String
和int
或任何其他类型作为输入。
当我想为这个someMethod
编写单元测试时,我是用自己给定的String和Int填充方法然后通过我的测试运行它?这不会让我的测试依赖于我的输入吗?
大概他们的值(字符串和int输入)来自另一个函数,我应该对该函数进行单独的单元测试吗?
答案 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
等...
是的,您应该对您的单元测试进行全面测试,并尝试尽可能多地覆盖代码。您可以测试单个函数,但测试对象,协议和重要独立函数的接口更为重要。这就是为什么它被称为单元测试,你正在测试一个块或代码单元 - 而不是单个部分。