Яка мета Verifiable()?
Якщо я підтверджую, Mockа залиште це, він все ще перевіряє SetUp.
Редагувати: Я використовував, VerifyAll()таким чином, причину все перевіряється. Після зміни Verify()лише .Verifiable() SetUpперевірялися мої s.
Яка мета Verifiable()?
Якщо я підтверджую, Mockа залиште це, він все ще перевіряє SetUp.
Редагувати: Я використовував, VerifyAll()таким чином, причину все перевіряється. Після зміни Verify()лише .Verifiable() SetUpперевірялися мої s.
Відповіді:
ДОПОЛНЕННЯ: Як говориться в іншій відповіді, мета .Verifiableполягає в тому, щоб включити Setupв набір "відкладені Verify(...)дзвінки", які потім можуть бути запущені через mock.Verify().
З роз'яснення ОП чітко видно, що це була мета, і єдиною проблемою було з'ясування того, чому це не працює, але, як сказала @Liam, відповідь дійсно повинна торкнутися і цього: - Ключові випадки використання, наскільки я можу дивіться:
mock.Setup()іmock.VerifyVerifyвиклику (наприклад, ви можете встановити її іншим допоміжним методом)... і повернусь до моєї відповіді, яка настійно каже: "будьте обережні, оскільки вищезазначені плюси, як правило, вважаються переваженими від того, що досягнення цих цілей має на розбірливість та ремонтопридатність тестів, які занадто сильно спираються на подібні конструкції".
ОРИГІНАЛ: Зауважте, що там, де це можливо, слід замість того, щоб дотримуватися макета AAA, а отже, слід робити явні mock.Verify( expression )дзвінки після того, як робота була виконана, а не в mock.Setup( ... ).Verifiable()парі з a mock.Verify()абоmock.VerifyAll() де це можливо (кредит: @kzu ).
Verifyable()/ VerifyAll()у всіх випадках. Мій поточний тестовий блок має велику кількість Setup(...)дзвінків (> 30). Міг би відповідати кожному з еквівалентним Verify (), щоб задовольнити умовність, але це спричиняє велику кількість дублювання коду і буде складнішим у підтримці та зчитуванні у міру збільшення кількості одиничних тестів. Я думаю, що я справді запитую, чи можна зробити винятки, якщо існує велика кількість налаштувань, або це уникнення Verifiable()жорсткого і швидкого правила?
Setupі a Verify, у якого може бути відсутній більший виграш, який можна досягти, лише послабити обмеження DRY у спосіб, запропонований AAA та сімейством стратегій, що настійно має на увазі
Коли Verify()метод викликається в кінці тесту, якщо будь-яке з очікувань, позначених як перевіряється, не було викликано, то виняток є thrown.
VerifyAll() не перевіряє перевірених очікувань.