Модульное тестирование Java: как измерить объем памяти для вызова метода

Вот мой прием:

  • с использованием async/await
  • , не нуждающихся в дополнительных модулях chai
  • , избегая проблемы с catch, @TheCrazyProgrammer указал выше

Функция с задержкой обещания, которая терпит неудачу, если задана задержка 0:

const timeoutPromise = (time) => {
    return new Promise((resolve, reject) => {
        if (time === 0)
            reject({ 'message': 'invalid time 0' })
        setTimeout(() => resolve('done', time))
    })
}

//                     ↓ ↓ ↓
it('promise selftest', async () => {

    // positive test
    let r = await timeoutPromise(500)
    assert.equal(r, 'done')

    // negative test
    try {
        await timeoutPromise(0)
        // a failing assert here is a bad idea, since it would lead into the catch clause…
    } catch (err) {
        // optional, check for specific error (or error.type, error. message to contain …)
        assert.deepEqual(err, { 'message': 'invalid time 0' })
        return  // this is important
    }
    assert.isOk(false, 'timeOut must throw')
    log('last')
})

Положительный тест довольно прост. Неожиданный сбой (имитация с помощью 500→0) автоматически завершит тест, так как отклоненное обещание возрастает.

Отрицательный тест использует идею try-catch. Однако: «жалобы» на нежелательный проход происходит только после предложения catch (таким образом, это не заканчивается в предложении catch (), вызывая дальнейшие, но вводящие в заблуждение ошибки.

Чтобы эта стратегия работала, нужно вернуть тест из предложения catch. Если вы не хотите тестировать что-либо еще, используйте другой блок () -.

30
задан Olimpiu POP 10 April 2014 в 06:43
поделиться