Внедрение зависимости в NerdDinner - на самом деле тестирование Вашего репозитория или модели

Вы можете использовать объект XMLHttpRequest для этого. Вот простой пример

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

После загрузки вы можете выполнить синтаксический анализ / извлечение с помощью регулярных выражений javascript для члена req.responseText.

Подробнее ...

На практике вам нужно сделать немного больше, чтобы получить объект XMLHttpRequest кросс-платформенным способом, например :

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

Или использовать библиотеку ...

В качестве альтернативы, вы можете сэкономить на себе и просто использовать библиотеку, такую ​​как jQuery или Prototype , чтобы позаботиться об этом за вас.

Политика того же происхождения может вас укусить, хотя ...

Обратите внимание, что в соответствии с политикой того же происхождения запрашиваемая страница должна принадлежать тому же домену, что и страница, выполняющая запрос. Если вы хотите запросить удаленную страницу, вам нужно будет передать ее через скрипт на стороне сервера.

Другой возможный обходной путь - использование Flash для выполнения запроса, который разрешает междоменные запросы, если целевой сайт предоставляет разрешение с соответствующим образом настроенным файлом crossdomain.xml.

Вот хорошая статья на тему политики того же происхождения:

7
задан alexandrul 18 May 2010 в 05:29
поделиться

2 ответа

Вероятно, это не полный ответ на ваш вопрос, но я постараюсь частично ответить на этот вопрос.

Интерфейс - в данном случае IDinnerRepository - следует рассматривать как контракт . Это означает, что любая реализация должна выполнять этот контракт. Если используется метод FindAllDinners (), то в основном это то, что он должен делать. Поддельный репозиторий, используемый для модульных тестов, обычно может быть НАМНОГО проще, чем реальный (например, с использованием словаря), поэтому соблюдение реальной реализации не должно рассматриваться как проблема, а скорее как требование.

Причина существования фальшивого репозитория в первую очередь - это тестирование. В принципе, все, что можно протестировать, нужно проверять. И исключение базы данных из уравнения - это суть фальшивого репозитория в памяти. Доступ к данным не является предметом тестирования, поэтому мы его заменяем. Поддельный репозиторий намного быстрее настраивается и используется, и мы можем легко убедиться, что репозиторий находится в таком состоянии, которое необходимо для прохождения тестируемого кода.

Итак, что вы делаете, так это передаете модели копию вашего поддельного репозитория в модульных тестах, и убедитесь, что все, что происходит в коде модели, отражается в поддельном репозитории.

Я думаю, вы обнаружите, что на практике сохранить репозитории синхронизированы. Если требования изменятся, вы измените интерфейс, и необходимо будет изменить обе реализации. Если намерения изменятся, вы, вероятно, дойдете до точки, когда ваши модульные тесты начнут ломаться.

Надеюсь, это поможет!

и мы можем легко убедиться, что репо находится в состоянии, необходимом для прохождения тестируемого кода.

Итак, что вы делаете, так это передаете модели копию вашего поддельного репозитория в ваших модульных тестах и ​​делаете убедитесь, что все, что происходит в коде модели, отражается в поддельном репозитории.

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

Надеюсь, это поможет!

и мы можем легко убедиться, что репо находится в состоянии, необходимом для прохождения тестируемого кода.

Итак, что вы делаете, так это передаете модели копию вашего поддельного репозитория в ваших модульных тестах и ​​делаете убедитесь, что все, что происходит в коде модели, отражается в поддельном репозитории.

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

Надеюсь, это поможет!

и убедитесь, что все, что происходит в коде модели, отражено в поддельном репозитории.

Я думаю, вы обнаружите, что на практике синхронизация репозиториев не составит проблем. Если требования изменятся, вы измените интерфейс, и необходимо будет изменить обе реализации. Если намерения изменятся, вы, вероятно, дойдете до точки, когда ваши модульные тесты начнут ломаться.

Надеюсь, это поможет!

и убедитесь, что все, что происходит в коде модели, отражено в поддельном репозитории.

Я думаю, вы обнаружите, что на практике синхронизация репозиториев не составит проблем. Если требования изменятся, вы измените интерфейс, и необходимо будет изменить обе реализации. Если намерения изменятся, вы, вероятно, дойдете до точки, когда ваши модульные тесты начнут ломаться.

Надеюсь, это поможет!

4
ответ дан 7 December 2019 в 10:04
поделиться
function getStopWords(){
return array(
'אני',
'את',
'אתה',
'אנחנו',
'אתן',
'אתם',
'הם',
'הן',
'היא',
'הוא',
'שלי',
'שלו',
'שלך',
'שלה',
'שלנו',
'שלכם',
'שלכן',
'שלהם',
'שלהן',
'לי',
'לו',
'לה',
'לנו',
'לכם',
'לכן',
'להם',
'להן',
'אותה',
'אותו',
'זה',
'זאת',
'אלה',
'אלו',
'תחת',
'מתחת',
'מעל',
'בין',
'עם',
'עד',
'נגר',
'על',
'אל',
'מול',
'של',
'אצל',
'כמו',
'אחר',
'אותו',
'בלי',
'לפני',
'אחרי',
'מאחורי',
'עלי',
'עליו',
'עליה',
'עליך',
'עלינו',
'עליכם',
'לעיכן',
'עליהם',
'עליהן',
'כל',
'כולם',
'כולן',
'כך',
'ככה',
'כזה',
'זה',
'זות',
'אותי',
'אותה',
'אותם',
'אותך',
'אותו',
'אותן',
'אותנו',
'ואת',
'את',
'אתכם',
'אתכן',
'איתי',
'איתו',
'איתך',
'איתה',
'איתם',
'איתן',
'איתנו',
'איתכם',
'איתכן',
'יהיה',
'תהיה',
'היתי',
'היתה',
'היה',
'להיות',
'עצמי',
'עצמו',
'עצמה',
'עצמם',
'עצמן',
'עצמנו',
'עצמהם',
'עצמהן',
'מי',
'מה',
'איפה',
'היכן',
'במקום שבו',
'אם',
'לאן',
'למקום שבו',
'מקום בו',
'איזה',
'מהיכן',
'איך',
'כיצד',
'באיזו מידה',
'מתי',
'בשעה ש',
'כאשר',
'כש',
'למרות',
'לפני',
'אחרי',
'מאיזו סיבה',
'הסיבה שבגללה',
'למה',
'מדוע',
'לאיזו תכלית',
'כי',
'יש',
'אין',
'אך',
'מנין',
'מאין',
'מאיפה',
'יכל',
'יכלה',
'יכלו',
'יכול',
'יכולה',
'יכולים',
'יכולות',
'יוכלו',
'יוכל',
'מסוגל',
'לא',
'רק',
'אולי',
'אין',
'לאו',
'אי',
'כלל',
'נגד',
'אם',
'עם',
'אל',
'אלה',
'אלו',
'אף',
'על',
'מעל',
'מתחת',
'מצד',
'בשביל',
'לבין',
'באמצע',
'בתוך',
'דרך',
'מבעד',
'באמצעות',
'למעלה',
'למטה',
'מחוץ',
'מן',
'לעבר',
'מכאן',
'כאן',
'הנה',
'הרי',
'פה',
'שם',
'אך',
'ברם',
'שוב',
'אבל',
'מבלי',
'בלי',
'מלבד',
'רק',
'בגלל',
'מכיוון',
'עד',
'אשר',
'ואילו',
'למרות',
'אס',
'כמו',
'כפי',
'אז',
'אחרי',
'כן',
'לכן',
'לפיכך',
'מאד',
'עז',
'מעט',
'מעטים',
'במידה',
'שוב',
'יותר',
'מדי',
'גם',
'כן',
'נו',
'אחר',
'אחרת',
'אחרים',
'אחרות',
'אשר',
'או'
);
}
-121--3287054-

Ничего не стоит, чтобы FakeRepositionRepository тестировал код, который требует IDinterRepository. Не тестировать сам репозиторий. Если бы мы использовали реальное хранилище для ужина, чтобы протестировать такие вещи, как контроллер, мы бы тестировали не только функциональность контроллера, но и сам доступ к данным. Хотя биты доступа к данным, безусловно, должны быть протестированы, они не должны быть протестированы в тестах контроллера ужина.

Тестирование доступа к данным - довольно спорная тема. Я считаю, что причина, по которой большинство людей оставляют его из своих единичных тестов, заключается просто в том, что для его выполнения требуется гораздо больше времени. Необходимость запроса базы данных добавит тонну времени к тестированию, которое большинство разработчиков предпочли бы не переносить.

Будет ли ваш доступ к данным протестирован в модульных тестах или более формальном функциональном тестировании, зависит от вас. Но его, безусловно, нужно проверить. Лично я фанат тестирования транзакций на уровне доступа к данным. Просто убедитесь, что вы тестируете только свои запросы, а не то, что ваш ORM работает так, как предполагается (это задание ORM).

2
ответ дан 7 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: