Посмотрите на exiftool.exe. Это бесплатно. Это стандарт для такого рода вещей, но вам нужно будет выложить.
Разбейте тесты на два совершенно разных типа.
Испытания модели. Поместите их в файл models.py
с моделью. Эти тесты будут выполнять методы в классах модели. Можно выполнить простое CRUD (Создать, Извлечь, Обновить, Удалить), чтобы просто доказать, что модель работает. Не проверяйте каждый атрибут. Проверьте значения полей по умолчанию и сохраните ()
правила, если вам интересно.
В качестве примера создайте класс StartNews
, который создает, получает, обновляет и удаляет элемент News
. Проверьте результаты даты по умолчанию. Этот класс должен быть коротким и доходить до точки. При необходимости можно протестировать различные виды обработки фильтров. Код модульного теста может (и должен) содержать примеры «правильного» способа фильтрации новостей
.
Тесты пользовательского интерфейса. Поместите их в отдельный файл tests.py
. В ходе этих тестов будут проверены функции просмотра и шаблоны.
Назовите Test Case «условием», которое вы создаете. «Test NotNotIn». «TexIntegrationIn». «StartNoValidThis». «StartNotAllowedToDoThat». Ваш setUp
выполнит вход в систему и другие действия, необходимые для установки требуемого условия.
Присвойте каждому методу тестирования имя с указанием действия и результата. «test_get_noquery_should_list,» «test_post_should_validate_with_errors,» «test_get_query_should_detail.»
Можно использовать 2 ExecutionServices, отправить реализацию Callable в службу A, которая знает о последующих действиях в службе B. После завершения работы Callable отправляет в службу B новую задачу, которая делает что-то дополнительное с результатами.
Вы можете использовать CountDureLatch или какой-либо другой барьер, если вам потребуется выполнить дополнительную работу после того, как все предметы будут обработаны в обеих службах.
API-интерфейс службы ExecutingService довольно прост, по большей части вы, вероятно, будете использовать что-то вроде .newFixedThreadPool (int threads) и отправлять в него Runnables/Callables.
-121--1415197-Следует отметить, что когда автоматическое сворачивание полей раздражает вас (и вы не используете фоновые цвета на ваших элементах), что-то просто проще использовать набивку.
Я бы сказал так: какой язык ассоциируется с рядом алфавитов - это просто соглашение. Люди, разработавшие Objective-C, решили, что
[x doSomething];
означает «отправка сообщения doSomething
объекту , указанному x». Они определили это так, вы следуете правилу:)
Одна особенность Objective-C, по сравнению, например, с C++, заключается в том, что он не имеет синтаксиса для хранения самого объекта, а не указателя на объект. Итак,
NSString* string;
- это нормально, но
NSString string;
- это незаконно. Если бы это было возможно, то существовал бы способ «отправить сообщение capitalizedString
в последовательность последовательностей
», а не «отправить сообщение capitalizedString
в последовательность , на которое указывает последовательности
». Но на самом деле вы всегда отправляете сообщение объекту , на который указывает переменная в вашем исходном коде.
Итак, если бы дизайнеры Objective-C следовали вашей логике, вам пришлось бы писать
[*x doSomething];
каждый раз, когда вы отправляете сообщение... Видите ли, *
должен всегда появляться после ведущей скобки [
, образуя комбинацию [*
. На этом этапе я считаю, что вы согласны с тем, что лучше переработать язык так, чтобы вам пришлось писать только [
вместо [*
, изменив значение последовательности букв [x doSomething]
.
Бизнес-объекты в том виде, в котором они названы, очевидно, должны иметь собственную бизнес-логику, причем динамика бизнес-логики среди доменов находится на уровне услуг.
С другой стороны, может ли ВО быть композицией и способами контейнера данных (DTO?); означает, что БО являются чистыми функциональными α Это может избежать всех преобразований между BO и DTO.
-121--2917487-Поле находится снаружи элементов блока, а набивка - внутри.
Что касается полей, то вам не нужно беспокоиться о ширине элемента.
Например, когда вы указываете что-то {padding: 10px;}
, вам придется уменьшить ширину элемента на 20 пикселей , чтобы сохранить размер по размеру ] 'и не беспокоить другие элементы вокруг него.
Поэтому я обычно начинаю с использования отступов, чтобы все « упаковано
», а затем использую поля для незначительных изменений.
Еще одна вещь, о которой следует помнить, - это то, что отступы более согласованы в разных браузерах, а IE не очень хорошо обрабатывает отрицательные поля.
Вот код HTML, который демонстрирует, как padding
и margin
влияют на кликабельность и заполнение фона. Объект получает щелчки по своему отступу, но щелчки по области полей объекта переходят к его родительскому элементу.
$ (". Внешний"). Click (функция (e) {console.log ("внешний"); e.stopPropagation ();}); $ (". inner"). click (function (e) {console.log ("inner"); e.stopPropagation ();});
.outer {padding: 10px; фон: красный; } .inner {маржа: 10 пикселей; отступ: 10 пикселей; фон: синий; граница: сплошной белый 1px; }