Как организовать тестовые приложения C++ и связанные файлы?

Вы можете использовать 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>
8
задан oliver 9 October 2008 в 10:17
поделиться

7 ответов

Возможно, библиотека могла принять некоторый потоковый ввод, таким образом, Вы могли передать в подобном строке объекте и избежать всех входных файлов? Или в зависимости от типа конфигурации, Вы могли обеспечить "get/setAttribute ()" функции к непосредственно, publicy, скрипка параметры. Если это не действительно цель дизайна, то не имеет значения. Управляемые данными модульные тесты осуждены в некоторых местах, но это определенно лучше чем ничего! Я, вероятно, разметил бы код как это:

  project/
          src/
          tests/
                test1/
                      input/
                test2
                      input/

В каждом testN каталоге Вам связали бы cpp файл к файлам конфигурации во входном каталоге.

Затем принятие Вас пользуется тестовой библиотекой xUnit-стиля (cppunit, googletest, unittest ++, или безотносительно) можно добавить различный testXXX () функции к единому классу для проверения связанных групп функциональности. Тем путем Вы могли отключить часть lots-of-little-programs проблемы путем собирания в группу по крайней мере некоторых тестов.

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

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

5
ответ дан 5 December 2019 в 22:21
поделиться

Часть 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, Действительно довольный видеть, что Вы спрашиваете это теперь при установке вещей!

1
ответ дан 5 December 2019 в 22:21
поделиться

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

0
ответ дан 5 December 2019 в 22:21
поделиться

Для вещей как это у меня всегда есть маленький служебный класс, который загрузит конфигурацию в буфер памяти, и оттуда это питается в на самом деле класс конфигурации. Это означает, что реальный источник не имеет значения - это мог быть файл или дб. Для модульного теста это трудно кодируется один в станд.:: строка, которая затем передается классу для тестирования. Можно моделировать 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 
0
ответ дан 5 December 2019 в 22:21
поделиться

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

0
ответ дан 5 December 2019 в 22:21
поделиться

Вы не найдете каркас модульного тестирования хуже, чем CppUnit. Серьезно, любой, кто рекомендует CppUnit, на самом деле не смотрел ни на одну из конкурирующих платформ.

Так что да, пойдите для тестирования юнит-тестирования, но не используйте CppUnit.

0
ответ дан 5 December 2019 в 22:21
поделиться

Предположение, что Вы управляете дизайном библиотеки, я ожидал бы, что Вы сможете осуществить рефакторинг таким образом, что Вы разделяете проблемы фактического файла, читающего из интерпретации его как конфигурационный файл:

  1. класс FileReader читает файл и производит входной поток,
  2. класс ConfigFileInterpreter проверяет/интерпретирует и т.д. содержание входного потока

Теперь для тестирования FileReader Вам было бы нужно очень небольшое количество фактических файлов (пустой, двоичный, простой текст и т.д.), и для ConfigFileInterpreter Вы будете использовать тупик класса FileReader, который возвращает входной поток для чтения из. Теперь можно подготовить все различные ситуации с конфигурацией как строки, и Вы не должны были бы читать столько файлов.

0
ответ дан 5 December 2019 в 22:21
поделиться
Другие вопросы по тегам:

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