Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 测试特定条件/场景时,是否需要检查前后结果?_Unit Testing_Tdd - Fatal编程技术网

Unit testing 测试特定条件/场景时,是否需要检查前后结果?

Unit testing 测试特定条件/场景时,是否需要检查前后结果?,unit-testing,tdd,Unit Testing,Tdd,我是一个单元测试代码,它处理将对时间敏感的任务委派给具有可变可用时间的临时工。然而,我想要的一般答案应该独立于这一背景 因此,我将进行如下结构的测试: 在特定条件X下,测试任务1委托给Bob: 检查任务1是否委托给弗兰克 创建特定条件X 测试任务1现在被委派给Bob 我的问题是,第一步是否多余?我已经有了另一个单独检查步骤1的测试(在没有特定条件的情况下,任务会委托给Frank) 然而,添加步骤1使我感到安全,因为我的测试实际上是在测试完全正确的东西——我验证结果在条件X下发生了变化 下面是另一

我是一个单元测试代码,它处理将对时间敏感的任务委派给具有可变可用时间的临时工。然而,我想要的一般答案应该独立于这一背景

因此,我将进行如下结构的测试:

在特定条件X下,测试任务1委托给Bob:
  • 检查任务1是否委托给弗兰克
  • 创建特定条件X
  • 测试任务1现在被委派给Bob
  • 我的问题是,第一步是否多余?我已经有了另一个单独检查步骤1的测试(在没有特定条件的情况下,任务会委托给Frank)

    然而,添加步骤1使我感到安全,因为我的测试实际上是在测试完全正确的东西——我验证结果在条件X下发生了变化

    下面是另一个更具体的例子:

    如果无人可用,则不会委派测试任务
  • 创建可用性,并检查是否委派了任务
  • 删除可用性,并检查未委派的任务
  • 再说一次,第一步是不是矫枉过正了?我已经有一个测试要测试步骤1,它自己:

    如果人员可用,则委派测试任务
  • 创建可用性,并检查是否委派了任务
  • 那么,在上一个示例中重新测试该场景是愚蠢的吗,只是要额外确定一下

    我最初(不久前)认为这是一个好主意,但现在读我的代码,这似乎有些过头了。但是在从测试套件中删除一大堆代码之前,我想确定一下


    谢谢

    对于这两个示例,我不会将第一步描述为附加测试,它们是断言前提条件。如果测试的先决条件对读者来说不明显,这些确实会增加价值。这可能是以下情况:

    • 测试的编写方式意味着,读者不太清楚这个前提条件是否适用于测试的其余部分。在这种情况下,前置条件断言有助于使读者更清楚地了解预期的前置条件。一种可能发生这种情况的场景是,如果您的测试数据是在一个设置方法中设置的,因为数据设置和测试声明之间的分离使得读者更难理解测试是如何工作的

    • 您使用的是高度复杂的代码(即复杂的数学算法),其复杂性意味着调试测试失败和理解问题原因可能需要一段时间。在这些情况下,断言前提条件可以极大地帮助理解测试的预期行为

    当然,除了提高可读性外,您还可以从中受益,如果测试由于一个先决条件而失败,那么就更容易理解测试失败的原因。然而,我不会仅仅因为这个原因就开始向测试添加前置条件——如果您需要前置条件断言来帮助您理解测试失败的原因,那么可能是因为您的测试过于复杂

    我要补充的一件事是,如果您以这种方式使用断言语句,我只需在它们上面添加一条注释,以向读者清楚地表明您使用此断言来检查一个前置条件


    最后一点——这个答案只关注单元测试。当您进入不同类型的测试(例如,执行整个软件堆栈的系统测试)时,其中的测试可能更脆弱,那么在测试中包含前置条件断言的论点就更为强烈了。

    对于这两个示例,我不会将第一步描述为附加测试,它们是断言前置条件。如果测试的先决条件对读者来说不明显,这些确实会增加价值。这可能是以下情况:

    • 测试的编写方式意味着,读者不太清楚这个前提条件是否适用于测试的其余部分。在这种情况下,前置条件断言有助于使读者更清楚地了解预期的前置条件。一种可能发生这种情况的场景是,如果您的测试数据是在一个设置方法中设置的,因为数据设置和测试声明之间的分离使得读者更难理解测试是如何工作的

    • 您使用的是高度复杂的代码(即复杂的数学算法),其复杂性意味着调试测试失败和理解问题原因可能需要一段时间。在这些情况下,断言前提条件可以极大地帮助理解测试的预期行为

    当然,除了提高可读性外,您还可以从中受益,如果测试由于一个先决条件而失败,那么就更容易理解测试失败的原因。然而,我不会仅仅因为这个原因就开始向测试添加前置条件——如果您需要前置条件断言来帮助您理解测试失败的原因,那么可能是因为您的测试过于复杂

    我要补充的一件事是,如果您以这种方式使用断言语句,我只需在它们上面添加一条注释,以向读者清楚地表明您使用此断言来检查一个前置条件


    最后一点——这个答案只关注单元测试。当您进入不同类型的测试(例如,执行整个软件堆栈的系统测试)时,其中的测试可能更脆弱,那么在测试中包含前置条件断言的论点就更为强烈了。

    这就是我喜欢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
    
    在写这篇文章时,我们发现了一些东西。首先,这可能不是经典测试中的单元测试。您正在测试一个类(