Мне было интересно, может ли кто-нибудь дать мне несколько указателей на разработку моих модульных тестов, в частности, где тестируемая функция появляется в самом тесте, кроме как в действии устройства.Метод, тестируемый в модульном тесте, отличном от действия
Я пишу на стороне сервера javascript с узлом и используя rsvp для асинхронных вызовов в резервную копию.
Я строю свои модульные тесты следующим образом.
//Setup
//Action
//Assertion
//Cleanup
Прямо сейчас, я создаю функцию, которая асинхронно удаляет enteries в базе данных, чтобы мое модульное тестирование выглядит следующим образом.
"deletingFunction_1entry_returns1EntryDeleted": function() {
return new rsvp.Promise(function(resolve, reject) {
//Setup
var DatabaseEntry = { "Info": "Info" };
setup(DatabaseEntry).then(function(xPostedEntries) {
//if the setup promise resolves then...
//Action
xDelete(xPostedEntries).then(function(xDeletedEnteries) {
//Assertion
if (xPostedEntries === xDeletedEntries) {
//if the posted enteries matched the deleted enteries then...
resolve();
} else {
//otherwise the posted enteries did not match the deleted
//enteries so...
reject("The posted enteries did not match the deleted enteries.");
}
});
}, function(xPostedEnteries) {
//otherwise the setup promise did not resolve so...
//Cleanup
/***************************************************************/
/* Here's where I'm having trouble. If the setup fails to post */
/* all of the entries to the database then the test is a */
/* scratch but I want to clean up all the posts that 'were' */
/* posted but to remove them from the database, I'd be using a */
/* deleting function, which is the function that I'm testing. */
/* So how can I redesign my unit test not to use the function */
/* that it's testing. */
/***************************************************************/
reject("The setup failed.");
});
});
}
Edited: Я написал функцию, которая обрезает таблицу базы данных для очистки, но будет по-прежнему ценят указатели о том, как улучшить свое тестирование.
Благодарим за отзыв. Что вы подразумеваете под «побочными эффектами»? Есть ли у вас конструктивные комментарии для добавления? Я написал еще одну функцию, которая усекает таблицу базы данных для очистки как быстрое исправление, но я по-прежнему ценю советы по перепроектированию или очистке теста, чтобы он был законным. – ogginger
@ user2480206 вообще не разговаривать с базой данных в модульном тесте. https://en.wikipedia.org/wiki/Side_effect_(computer_science) – djechlin
Существует ли тип теста, который лучше подходит для этого типа метода? Или я концептуально затрудняюсь с пониманием того, как вы будете тестировать метод, который работал в базе данных, не разговаривая с базой данных. – ogginger