В настоящее время я занимаюсь модульным тестированием неуправляемого кода Visual C++ в Visual Studio 2010.
Мое решение структурировано следующим образом:
<Solution>
- [0] Static library project (visual c++, no clr)
- [1] Project that's using [0] (visual c++, no clr, referencing [0])
- [2] Unit Test Project (dynamic library, /clr, referencing [0])
</Solution>
Project [0] тестируется Project [2] и содержит SomeClass:
class SomeClass
{
public:
SomeClass() {}
int Testme() { return 42; }
};
В Project [2] я тестирую SomeClass следующим образом, и это работает:
[TestClass]
public ref class SomeClassUnitTests
{
public:
[TestMethod]
void TestmeReturns42()
{
SomeClass sc;
Assert::AreEqual<int>(42, sc.Testme());
}
};
Но когда я выделяю память для SomeClass в куче, и только когда я впоследствии вызываю на ней delete, появляется сообщение, показывающее, что куча повреждена / недействительна.
[TestClass]
public ref class SomeClassUnitTests
{
public:
[TestMethod]
void TestmeReturns42()
{
SomeClass *ptr = new SomeClass();
Assert::AreEqual<int>(42, ptr->Testme());
// Without following line, everything works:
if (ptr) delete ptr;
}
};
What could be the issue causing the Tests to throw right here, and why does allocating memory with 'new' work, but deleting doesn't?
Вы дали мне недостающую подсказку, потому что я каким-то образом (и только в отладочной версии) включил MFC в тестовый проект, потому что я использовал его внутри тестируемого проекта ... Поэтому я удалил весь связанный с MFC код из обоих test-project и тестируемый проект, и теперь вызов удаления больше не приводит к сбою программы. Я до сих пор не понимаю, почему включение MFC вызывает эту проблему ...





Есть ли несовпадение сборок отладки и выпуска или они все одинаковы?