Я тоже был смущен. См. Этот пример ниже:
<Window x:Class="WpfApplicationWPF.CommandsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CommandsWindow" Height="300" Width="300">
<StackPanel>
<Button Name="ButtonNew"
Click="ButtonNew_Click"
Background="{DynamicResource PinkBrush}">NEW</Button>
<Image Name="ImageNew"
Source="pack://application:,,,/images/winter.jpg"></Image>
</StackPanel>
<Window.Background>
<DynamicResource ResourceKey="PinkBrush"></DynamicResource>
</Window.Background>
</Window>
Здесь я использовал динамический ресурс для кнопки и окна и не объявлял его нигде. На этапе выполнения будет проверен ResourceDictionary иерархии. Поскольку я не определил его , Я предполагаю, что будет использоваться значение по умолчанию.
Если я добавлю код ниже, чтобы щелкнуть событие кнопки, так как они используют DynamicResource, фон будет соответствующим образом обновлен.
private void ButtonNew_Click(object sender, RoutedEventArgs e)
{
this.Resources.Add( "PinkBrush"
,new SolidColorBrush(SystemColors.DesktopColor)
);
}
Если они использовали StaticResource:
Надеюсь, я немного смутил.
Обычная практика должна поместить тестовый каталог в тот же родительский каталог как Ваш модуль/пакет. Таким образом, если бы Ваш модуль назвали foo.py, то Ваше расположение каталога было бы похоже:
parent_dir/
foo.py
tests/
, Конечно, нет никакого способа сделать его. Вы могли также сделать тестовый подкаталог и импортировать модуль с помощью абсолютный импорт .
Везде, куда Вы помещаете свои тесты, я рекомендовал бы использовать нос для выполнения их. Нос перерывает Ваши каталоги для тестов. Таким образом, можно поместить тесты везде, где они имеют большую часть смысла организационно.
Для файла module.py
модульный тест нужно обычно называть test_module.py
, после соглашений о присвоении имен Pythonic.
существует несколько обычно принимаемых мест для помещения test_module.py
:
module.py
. ../tests/test_module.py
(на том же уровне как каталог кода). tests/test_module.py
(один уровень в соответствии с каталогом кода). я предпочитаю № 1 для его простоты нахождения тестов и импорта их. Независимо от того, что система сборки, которую Вы используете, может легко быть настроена для выполнения файлов, запускающихся с test_
. На самом деле значение по умолчанию unittest
шаблон, используемый для тестового открытия, test*.py
.
Я недавно начал программировать в Python, таким образом, у меня действительно не было шанса узнать лучшую практику все же. Но, я записал модуль, который идет и находит все тесты и выполняет их.
Так, я имею:
app/ appfile.py test/ appfileTest.py
я должен буду видеть, как это идет, в то время как я прогрессирую до больших проектов.
В C# я обычно разделял тесты на отдельный блок.
В Python - до сих пор - я был склонен или писать doctests, где тест находится в docstring функции или поместил их в if __name__ == "__main__"
блок у основания модуля.
Когда запись пакета назвала "нечто", я помещу модульные тесты в отдельный пакет "foo_test". Модули и подпакеты будут тогда иметь то же имя как модуль пакета SUT. Например, тесты для модуля foo.x.y найдены в foo_test.x.y. __ init __. файлы py каждого пакета тестирования тогда содержат комплект AllTests, который включает все наборы тестов пакета. setuptools обеспечивает удобный способ определить основной пакет тестирования, так, чтобы после "Python setup.py разработали", можно просто использовать "Python setup.py тест", или "Python setup.py тестируют-s foo_test.x. SomeTestSuite" к справедливому определенный комплект.
Я не полагаю, что существует установленная "лучшая практика".
я поместил свои тесты в другой каталог за пределами кода приложения. Я тогда добавляю каталог главного приложения к sys.path (разрешающий Вам импортировать модули отовсюду) в моем сценарии исполнителя тестов (который делает некоторый другой материал также) прежде, чем запустить все тесты. Таким образом, я никогда не должен удалять тестовый каталог из основного кода, когда я выпускаю его, экономя мне время и усилие, если очень крошечная сумма.
Мы используем
app/src/code.py
app/testing/code_test.py
app/docs/..
В каждом тестовом файле мы вставляем "../src /" в sys.path. Это не самое хорошее решение, но работы. Я думаю, что было бы замечательно, если бы кто-то подошел w/что-то как знаток в Java, который дает Вам стандартные соглашения, которые просто работают, неважно, какой проект Вы продолжаете работать.
Я использую tests/
каталог, и затем импортирую модули главного приложения с помощью относительного импорта. Таким образом в MyApp/tests/foo.py, мог бы быть:
from .. import foo
для импорта MyApp.foo
модуль.
Я также склонен помещать свои модульные тесты в сам файл, как Jeremy Cantrell выше примечаний, хотя я склонен не помещать тестовую функцию в основную часть, а скорее помещают все в
if __name__ == '__main__':
do tests...
блок. Это заканчивает тем, что добавило документацию к файлу как 'пример кода' для того, как использовать файл Python, который Вы тестируете.
я должен добавить, я склонен писать очень трудные модули/классы. Если бы Ваши модули требуют очень больших количеств тестов, можно поместить их в другого, но даже тогда, я все еще добавил бы:
if __name__ == '__main__':
import tests.thisModule
tests.thisModule.runtests
Это позволяет, кто-либо читающий Ваш исходный код знает, где искать тестовый код.
Я предпочитаю тестовый каталог верхнего уровня. Это действительно означает, что импорт становится немного более трудным. Для этого у меня есть два решения:
test_suite='tests.runalltests.suite'
в setup()
и можете запустить тесты просто: python setup.py test
PYTHONPATH=. python tests/runalltests.py
Вот то, как тот материал поддерживается кодом в M2Crypto:
, Если Вы предпочитаете запускать тесты с nosetests, Вы, возможно, должны были бы сделать что-то немного различное.
Если тесты будут просты, просто поместите их в docstring - то большинство сред тестирования для Python сможет использовать это:
>>> import module
>>> module.method('test')
'testresult'
Для других более включенных тестов, я поместил их или в ../tests/test_module.py
или в tests/test_module.py
.
У нас был тот же вопрос при написании Pythoscope ( https://pypi.org/project/pythoscope/ ), который генерирует модульные тесты для программ на Python. Мы опрашивали людей на тестировании в списке Python, прежде чем мы выбрали каталог, было много разных мнений. В итоге мы решили поместить каталог «tests» в тот же каталог, что и исходный код. В этом каталоге мы генерируем тестовый файл для каждого модуля в родительском каталоге.
Как я это делаю...
Структура папок:
project/
src/
code.py
tests/
setup.py
Setup.py указывает на src/ как на место, содержащее модули моего проекта, затем я запускаю:
setup.py develop
Что добавляет мой проект в site-packages, указывая на мою рабочую копию. Для запуска тестов я использую:
setup.py tests
Используя любой настроенный мною тестовый бегунок.