Unit testing 测试特定条件/场景时,是否需要检查前后结果?
我是一个单元测试代码,它处理将对时间敏感的任务委派给具有可变可用时间的临时工。然而,我想要的一般答案应该独立于这一背景 因此,我将进行如下结构的测试: 在特定条件X下,测试任务1委托给Bob:Unit testing 测试特定条件/场景时,是否需要检查前后结果?,unit-testing,tdd,Unit Testing,Tdd,我是一个单元测试代码,它处理将对时间敏感的任务委派给具有可变可用时间的临时工。然而,我想要的一般答案应该独立于这一背景 因此,我将进行如下结构的测试: 在特定条件X下,测试任务1委托给Bob: 检查任务1是否委托给弗兰克 创建特定条件X 测试任务1现在被委派给Bob 我的问题是,第一步是否多余?我已经有了另一个单独检查步骤1的测试(在没有特定条件的情况下,任务会委托给Frank) 然而,添加步骤1使我感到安全,因为我的测试实际上是在测试完全正确的东西——我验证结果在条件X下发生了变化 下面是另一
谢谢 对于这两个示例,我不会将第一步描述为附加测试,它们是断言前提条件。如果测试的先决条件对读者来说不明显,这些确实会增加价值。这可能是以下情况:
- 测试的编写方式意味着,读者不太清楚这个前提条件是否适用于测试的其余部分。在这种情况下,前置条件断言有助于使读者更清楚地了解预期的前置条件。一种可能发生这种情况的场景是,如果您的测试数据是在一个设置方法中设置的,因为数据设置和测试声明之间的分离使得读者更难理解测试是如何工作的
- 您使用的是高度复杂的代码(即复杂的数学算法),其复杂性意味着调试测试失败和理解问题原因可能需要一段时间。在这些情况下,断言前提条件可以极大地帮助理解测试的预期行为
最后一点——这个答案只关注单元测试。当您进入不同类型的测试(例如,执行整个软件堆栈的系统测试)时,其中的测试可能更脆弱,那么在测试中包含前置条件断言的论点就更为强烈了。对于这两个示例,我不会将第一步描述为附加测试,它们是断言前置条件。如果测试的先决条件对读者来说不明显,这些确实会增加价值。这可能是以下情况:
- 测试的编写方式意味着,读者不太清楚这个前提条件是否适用于测试的其余部分。在这种情况下,前置条件断言有助于使读者更清楚地了解预期的前置条件。一种可能发生这种情况的场景是,如果您的测试数据是在一个设置方法中设置的,因为数据设置和测试声明之间的分离使得读者更难理解测试是如何工作的
- 您使用的是高度复杂的代码(即复杂的数学算法),其复杂性意味着调试测试失败和理解问题原因可能需要一段时间。在这些情况下,断言前提条件可以极大地帮助理解测试的预期行为
最后一点——这个答案只关注单元测试。当您进入不同类型的测试(例如,执行整个软件堆栈的系统测试)时,其中的测试可能更脆弱,那么在测试中包含前置条件断言的论点就更为强烈了。这就是我喜欢RSpec的原因。它有助于使这类事情明确化
describe 'task delegation' do
context 'when availabilities are present' do
before do
# Create availabilities
end
it 'is assigned to person A' do
# test the assignment'
end
context 'and there is a specific condition' do
before do
# create specific condition
end
it 'is assigned to person B' do
# test the assignment
end
end
end
context 'when no availabilities are present' do
before do
# Do nothing
end
it 'is not assigned to anyone' do
# test the lack of assignment
end
end
end
在写这篇文章时,我们发现了一些东西。首先,这可能不是经典测试中的单元测试。您正在测试一个类(