【发布时间】:2011-11-23 12:31:21
【问题描述】:
我知道一般来说单元测试的目的是什么,但我发现了一些困扰我的事情。
1) 测试早期错误发现的目的。因此,在后来的一些迭代中,如果我对代码进行了一些更改,自动化测试必须提醒我并告诉我我已经搞砸了我的软件很久以前被遗忘的部分。
但是,假设我有 A 类,并说它与其他一些类的实例交互,称之为 B 类。
当一个人为 A 类编写单元测试时,他必须模拟 B 类。 所以,在未来的某个时候,如果对 B 类进行一些更改,并导致一些错误,它们将只反映在 B 类的单元测试中,而不是 A 的(因为 A 的测试不使用真正的 B 类,但它是模拟的具有固定的输入和输出)。 所以,我看不出单元测试如何提前通知人们不知道的错误?我知道我正在更改的类中可能存在的错误,我不需要对其进行单元测试,我需要测试以提醒我我的更改的后果会导致某些“被遗忘”类中的错误,而这不是可以通过单元测试。还是我错了?
2) 在编写调用方法、它们的输入和返回值的模拟和正确期望时,必须知道被测类将如何实现。 我认为这与测试驱动开发相矛盾。在 TDD 中,首先编写测试,然后在它们的驱动下编写代码。 但是除非我编写必须测试的代码,否则我无法编写正确的期望(和一般的测试)。这与 TDD 相矛盾,对吧?
如果我使用真实对象而不是模拟对象,这两个问题都可以解决。但这不是单元测试,对吧?在单元测试中,被测类必须与系统的其余部分隔离,而不是使用真实的类,而是使用模拟。
我确定我在某个地方错了,但我找不到在哪里。我一直在阅读和阅读,我找不到我理解错误的地方。
【问题讨论】:
标签: unit-testing testing