2013-04-24 1 views
3

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

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

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

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 

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

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

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

ответ

2

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

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

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

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

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

+0

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

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> {}