Вы можете использовать Style
с DataTrigger
, который связывается с SelectedItem
из ComboBox
:
<ComboBox x:Name="cmb" SelectedIndex="0" Margin="2" Width="100">
<ComboBoxItem Tag="X">X</ComboBoxItem>
<ComboBoxItem Tag="Y">Y</ComboBoxItem>
</ComboBox>
<Slider>
<Slider.Style>
<Style TargetType="Slider">
<Setter Property="Value" Value="{Binding XValue}" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem.Tag, ElementName=cmb}" Value="Y">
<Setter Property="Value" Value="{Binding YValue}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Slider.Style>
</Slider>
Возможно, библиотека могла принять некоторый потоковый ввод, таким образом, Вы могли передать в подобном строке объекте и избежать всех входных файлов? Или в зависимости от типа конфигурации, Вы могли обеспечить "get/setAttribute ()" функции к непосредственно, publicy, скрипка параметры. Если это не действительно цель дизайна, то не имеет значения. Управляемые данными модульные тесты осуждены в некоторых местах, но это определенно лучше чем ничего! Я, вероятно, разметил бы код как это:
project/
src/
tests/
test1/
input/
test2
input/
В каждом testN каталоге Вам связали бы cpp файл к файлам конфигурации во входном каталоге.
Затем принятие Вас пользуется тестовой библиотекой xUnit-стиля (cppunit, googletest, unittest ++, или безотносительно) можно добавить различный testXXX () функции к единому классу для проверения связанных групп функциональности. Тем путем Вы могли отключить часть lots-of-little-programs проблемы путем собирания в группу по крайней мере некоторых тестов.
Единственная проблема с этим состоит в том, если библиотека ожидает, что файл конфигурации будет назван чем-то определенным, или будет в определенном месте. Это не должно иметь место, но если это, должен был бы работаться вокруг путем копирования тестового файла в ожидаемое местоположение.
И не волнуйтесь о большом количестве тестов, загромождающих Ваш проект, если они будут убраны в тестовом каталоге затем, то они не побеспокоят никого.
Часть 1.
Как предложенный Richard, я смотрел бы на среду тестирования CPPUnit. Это будет управлять местоположением Вашей среды тестирования до некоторой степени.
Ваши тесты могли быть в параллельном каталоге, расположенном на высоком уровне, согласно примеру Richard, или в тестовых подкаталогах, или протестировать параллель каталогов с областью, которую Вы хотите протестировать.
Так или иначе, быть последовательным в структуре каталогов через проект! Особенно в случае тестов, содержавшихся в единственном высокоуровневом каталоге.
Нет ничего худшего, чем необходимость поддержать умственное отображение исходного кода в месте, таком как:
/project/src/component_a/piece_2/this_bit
и определение местоположения теста (тестов) где-нибудь, такого как:
/project/test/the_first_components/connection_tests/test_a
И я работал над проектами, где кто-то сделал это!
Какая трата wetware циклов! Разговор о 8-o о нарушении понятия Alexander Качества Без Имени.
Намного лучше имеет Ваши тесты последовательно располагаемое w.r.t. местоположение исходного кода под тестом:
/project/test/component_a/piece_2/this_bit/test_a
Часть 2
Что касается файлов конфигурации API, сделайте локальные копии ссылочной конфигурации в каждой локальной зоне испытания как часть тестовой установки ENV, которая выполняется прежде, чем выполнить тест. Не опрыскивайте копии конфигурации (или данные) на всем протяжении Вашего тестового дерева.
HTH.
удачи,
Ограбить
BTW, Действительно довольный видеть, что Вы спрашиваете это теперь при установке вещей!
В некоторых тестах я сделал, я на самом деле использовал тестовый код, чтобы записать конфигурационные файлы и затем удалить их после того, как тест использовал файл. Это увеличивает код несколько, и я понятия не имею, является ли это хорошая практика, но это работало. Если Вы, оказывается, используете повышение, то его модуль файловой системы полезен для создания каталогов, навигации по каталогам и удаления файлов.
Для вещей как это у меня всегда есть маленький служебный класс, который загрузит конфигурацию в буфер памяти, и оттуда это питается в на самом деле класс конфигурации. Это означает, что реальный источник не имеет значения - это мог быть файл или дб. Для модульного теста это трудно кодируется один в станд.:: строка, которая затем передается классу для тестирования. Можно моделировать currup! данные pte3d легко для тестирования путей распространения влияния отказа.
Я использую UnitTest ++. У меня есть тесты как часть src дерева. Так:
solution/project1/src <-- source code
solution/project1/src/tests <-- unit test code
solution/project2/src <-- source code
solution/project2/src/tests <-- unit test code
Я соглашаюсь с тем, что сказал @Richard Quirk, но также и Вы могли бы хотеть заставить свой набор тестов классифицировать друга класса, Вы тестируете и тестируете его закрытые функции.
Вы не найдете каркас модульного тестирования хуже, чем CppUnit. Серьезно, любой, кто рекомендует CppUnit, на самом деле не смотрел ни на одну из конкурирующих платформ.
Так что да, пойдите для тестирования юнит-тестирования, но не используйте CppUnit.
Предположение, что Вы управляете дизайном библиотеки, я ожидал бы, что Вы сможете осуществить рефакторинг таким образом, что Вы разделяете проблемы фактического файла, читающего из интерпретации его как конфигурационный файл:
Теперь для тестирования FileReader Вам было бы нужно очень небольшое количество фактических файлов (пустой, двоичный, простой текст и т.д.), и для ConfigFileInterpreter Вы будете использовать тупик класса FileReader, который возвращает входной поток для чтения из. Теперь можно подготовить все различные ситуации с конфигурацией как строки, и Вы не должны были бы читать столько файлов.