2013-02-15 2 views
0

У меня есть эта странная ситуация в модульных тестах, когда мне нужно проверить функцию, которая возвращает значение, которое невозможно сделать вручную (значение). Фактически эта функция предназначена для создания этого значения. Так проверить, как это (JavaScript и рамки QUnit):Измерение единиц измерения избыточности

asyncTest("UTF-8 - ArrayBuffer conversion", 1, function() { 
    var arrayBuffer; 
    var testUtf8 = "łużyński"; 
    var blob = new Blob([testUtf8]); 
    var f = new FileReader(); 
    f.onload = function(e) { 
     arrayBuffer = e.target.result; 
     start(); 
    }; 
    equal(utf8ToArrayBuffer(testUtf8), arrayBuffer, "UTF-8 to ArrayBuffer, OK!"); 
}); 

Является redunant, потому что подготовка переменной ArrayBuffer, чтобы сравнить его с возвращаемым значением является фактически то же самое, как с помощью utf8ToArrayBuffer(testUtf8), поэтому тест будет выглядеть следующим образом:

equal(utf8ToArrayBuffer(testUtf8), utf8ToArrayBuffer(testUtf8), "UTF-8 to ArrayBuffer, OK!"); 

Должен ли я проверять такие вещи или оставить его? Или, может быть, есть еще один подход к этому?

ответ

0

Вы не должны проверять, чтобы два равных вызова функции возвращали то же самое. Вы должны проверить, что результат вызова функции - это то, что вы ожидали. В вашем случае это означает, что у вас есть значение ("łużyński") в качестве ввода, и вы получаете буфер массива в качестве вывода. Вы можете проверить, действительно ли входное значение содержится в выводе.

Но без кода функции для проверки (utf8ToArrayBuffer()) трудно сказать, что именно вы могли проверить.

+0

Ну, я написал, что готовая ценность для сравнения такая же, как и функция, которую я тестирую. Однако реализация не должна иметь значения, поскольку это TDD, и я должен сначала написать тесты. Все, что я знаю прямо сейчас, это то, что 'utf8ToArrayBuffer (testUtf8)' должен возвращать arrayBuffer с преобразованным значением. Теперь я должен как-то проверить, если возвращенное значение в порядке. Я могу преобразовать этот массивBuffer обратно в текст, но тогда мне придется использовать другую функцию 'arrayBufferToUtf8', которая имеет одинаковую проблему с тестами. Таким образом, это будет нечто вроде избыточного перекрестного тестирования. –

+0

Для меня это имеет смысл, потому что код обеих функций может меняться независимо. Но поскольку это такая маленькая функция, вы не должны беспокоиться об этом. Если вы хотите проверить больше, чем просто возвращаемое значение, вы можете подумать о том, чтобы использовать макет и посмотреть, правильно ли он управляется. – Odi

Смежные вопросы