单元测试应该涵盖常量变化吗?
Should unit tests cover constants changing?
我正在为演示者创建单元测试。我有一个范围的 2 个常量,将来肯定可以更改为来自服务器的请求。所以我写了我所有的代码,它可以使用这个常量的任何值。
现在我可以更改此常量以进行单元测试。我将添加一些具有 return 这个常量范围的函数和模拟这个函数。但是我应该这样做。
一方面,更改测试常量让我相信我的代码可以处理任何值。但另一方面,单元测试不会涵盖常量未更改的情况。
换句话说,单元测试应该覆盖常量值吗?
实际答案将根据具体实施情况和意见而定,并取决于很多因素。
但是,我使用的一般规则是 - 如果它是真的 'parameter'(变化的值而不是常量),它应该被这样对待和测试。又名将值作为构造函数或方法参数传递。在这种情况下无需模拟。
否则,它只是一个常量,您的单元测试应该只测试每个 method/unit/etc 的输入和输出,而不管所述常量的值 'implementation detail'。
这个 'constant' 是应该被这样处理,还是作为参数来处理,由您决定。
当然,您现在可以进行该测试,但我建议遵循 YAGNI 原则:现在不要进行测试,您可能永远不会进行更改。但是,一旦将这些常量转换为变量,就必须扩展测试套件。有可能您的测试套件无论如何都需要维护,但要确保您不会忘记它,请向常量添加注释或使用其他形式的提醒...
我正在为演示者创建单元测试。我有一个范围的 2 个常量,将来肯定可以更改为来自服务器的请求。所以我写了我所有的代码,它可以使用这个常量的任何值。
现在我可以更改此常量以进行单元测试。我将添加一些具有 return 这个常量范围的函数和模拟这个函数。但是我应该这样做。
一方面,更改测试常量让我相信我的代码可以处理任何值。但另一方面,单元测试不会涵盖常量未更改的情况。
换句话说,单元测试应该覆盖常量值吗?
实际答案将根据具体实施情况和意见而定,并取决于很多因素。
但是,我使用的一般规则是 - 如果它是真的 'parameter'(变化的值而不是常量),它应该被这样对待和测试。又名将值作为构造函数或方法参数传递。在这种情况下无需模拟。
否则,它只是一个常量,您的单元测试应该只测试每个 method/unit/etc 的输入和输出,而不管所述常量的值 'implementation detail'。
这个 'constant' 是应该被这样处理,还是作为参数来处理,由您决定。
当然,您现在可以进行该测试,但我建议遵循 YAGNI 原则:现在不要进行测试,您可能永远不会进行更改。但是,一旦将这些常量转换为变量,就必须扩展测试套件。有可能您的测试套件无论如何都需要维护,但要确保您不会忘记它,请向常量添加注释或使用其他形式的提醒...