Я следующий ActiveRecord метод класса модели:Понимание Mutant Неудачи
def self.find_by_shortlink(shortlink)
find_by!(shortlink: shortlink)
end
Когда я бегу мутанта против этого метода, я сказал, было 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
Если я вручную сделать это те же изменения, мои тесты не - как и ожидалось.
Так что мой вопрос: как написать единичный тест, который «убивает» эту мутацию?
Спасибо за подробный ответ! Есть кое-что, что я до сих пор не понимаю (некоторые вещи, на самом деле, но я буду держать это в сжатом виде) о моем примере. Изменение параметра 'self' вызывает исключение' ActiveRecord:; StatementInvalid'. Это из-за проблем принуждения, о которых вы упомянули, или это то, что Mutant ожидает, что мои тесты будут рассмотрены? – pdoherty926
Что это значит, так это то, что ваши тесты не проверяют, что такое значение вообще. Тот факт, что значение может быть заменено на «я» (удобный режим ожидания для случайного объекта), означает, что для этой части метода нет спецификации. – dkubb
@dkubb Будет ли это означать насмешку 'find_by! ', Добавляя в мои тесты утверждения о значении параметра или что-то еще?Мог бы указать мне пример такой спецификации? – pdoherty926