WedX - журнал о программировании и компьютерных науках

Использование BoostTest с C++/CLI: возможно или нет?

У меня есть проект Visual Studio, содержащий код программы (модель). Я создал другой проект, чтобы поместить в него тесты повышения.

Проблема в том, что я не могу заставить его работать.

Я могу использовать только тесты повышения в проекте, но как только я захочу связать (ссылку и т. д.) с первым проектом (тот, на котором я хочу запустить тесты), проект тестирования повышения не будет компилироваться:

1>E:\boost_1_53_0\boost/detail/interlocked.hpp(99): warning C4164: '_InterlockedExchange' : fonction intrinsèque non déclarée
1>E:\boost_1_53_0\boost/detail/interlocked.hpp(100): warning C4164: '_InterlockedExchangeAdd' : fonction intrinsèque non déclarée
1>E:\boost_1_53_0\boost/smart_ptr/detail/spinlock_w32.hpp(62): error C3861: '_InterlockedExchange' : identificateur introuvable

Я прочитал там, что вы не можете

ваш код не C++, а C++ CLI, поэтому вы не можете использовать boost. C++ не имеет пространства имен System. В каждом файле .cpp вы можете использовать C++/CLI (и, следовательно, пространство имен System) ИЛИ boost. Если вы хотите использовать пространство имен System, вам необходимо включить «Поддержку среды выполнения Common Langauge», для ускорения вы должны отключить ее.

>> Может ли кто-нибудь подтвердить, что невозможно использовать Boost с программой C++/CLI?

24.04.2013

Ответы:


1

Да, это возможно.

Сначала вам нужно изменить свой проект C++/CLI на /clr (/clr:pure или /clr:safe не будут работать). Это позволяет вашему проекту работать в смешанном режиме, т. е. выполнять как собственный код C++, так и управляемый код.
Подробнее читайте на msdn.microsoft.com

Настройте Boost.Test для Visual Studio (добавьте путь к .h Boost и добавьте путь к .lib в компоновщике; возможно, вам придется скомпилировать Boost, потому что в некоторых случаях это не «только заголовок»); вот хороший учебник itee.uq.edu.au

Вот и все, вы можете писать и компилировать свои тесты.

Однако из-за ошибки в процессе компиляции (скорее всего, компоновки) кода C++/CLI и Boost я не смог поместить тесты Boost в другой проект; поэтому мне пришлось поместить модульные тесты в код самой программы (хотя и в отдельные файлы .cpp, что является приемлемым решением).

29.05.2013
  • К сожалению, я не вижу способа использовать (управляемые) приборы. BOOST_FIXTURE_TEST_CASE принимает только неуправляемые классы, которые не могут содержать управляемые элементы. 18.02.2014

  • 2

    Основная проблема заключается в том, что в коде C++ (не CLI), таком как boost, вы не можете хранить какие-либо управляемые ссылки или указатели.

    Я обнаружил, что для кода C++/CLI обычно предпочтительнее использовать среду тестирования C#. C# может взаимодействовать с частью C++/CLI, которая может взаимодействовать с чистой частью C++. Кроме того, большинство вариантов использования C++/CLI представляют собой обертку кода C++ или C для .Net, поэтому вполне естественно протестировать интерфейс, который может видеть .Net.

    Например, у меня есть проект, в котором все интерфейсы указаны на C#. Некоторые реализации используют C++/CLI и вызывают библиотеки boost, другие — чистый C#. Модульные тесты являются универсальными, при этом общий параметр представляет собой фактическую тестируемую реализацию.

    Пример для MSTest/vstest:

    public class MyTest< T > where T : IMyInterface
    {
        [TestMethod]
        public void foo() {...}
    }
    
    [TestClass]
    public class TestCppCli : MyTest< CppCliImpl > {}
    
    [TestClass]
    public class TestCSharp : MyTest< CSharpImpl> {}
    
    29.05.2013
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]