gpt4 book ai didi

ruby-on-rails - 理解突变失败

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:49 25 4
gpt4 key购买 nike

我有以下 ActiveRecord 模型类方法:

def self.find_by_shortlink(shortlink)
find_by!(shortlink: shortlink)
end

当我针对此方法运行 Mutant 时,我被告知有 17 个突变,并且 16 个在测试运行后仍然“活着”。

这是“实时”突变之一:

-----------------------
evil:Message.find_by_shortlink:/home/peter/projects/kaboom/app/models/message.rb:29:3f9f2
@@ -1,4 +1,4 @@
def self.find_by_shortlink(shortlink)
- find_by!(shortlink: shortlink)
+ find_by!(shortlink: self)
end

如果我手动进行同样的更改,我的测试会失败 - 正如预期的那样。

所以我的问题是:如何编写“杀死”这种突变的单元测试?

最佳答案

免责声明,突变作者发言。

此类情况的小备忘单:

  1. 确保您的规范现在是绿色的。
  2. 根据差异显示更改代码
  3. 尝试观察不需要的行为变化。
    1. 不可能?
      1. (可能)将突变视为更好的代码。
      2. (不太可能)向突变体报告错误
    2. 发现行为变化:将其编码为测试,或更改测试以涵盖该行为。
  4. 重新运行突变体以验证突变体的死亡。
  5. 确保 mutant 确实列出了您添加的用于该 mutation 的测试。如果不重组测试以涵盖所选测试中的突变主题。

现在针对您的情况:如果您将变更应用到您的代码。该参数被忽略并基本上被硬编码(在您的查找器中使用的键 :shortlink 的值不会根据参数 shortlink 而改变)。因此,您在测试中唯一需要做的就是添加一个案例,其中参数 shortlink 对您在测试中的期望很重要。

如果将 self 作为 :shortlink 查找器的值传递与传递您测试的当前参数具有相同的效果,请尝试使用不同的参数。在 AR 中强制转换查找器中的值可能很棘手,您的模型有可能强制转换为您正在测试的相同值作为参数。

关于ruby-on-rails - 理解突变失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com