template
class IntermittentQueue : Queue { /* some other statements */ }; Это определяет новый класс шаблона:
template
class IntermittentQueue { } , который в то же время наследует от другого, такого как:
class Base { }; class Derived : Base { };
Исключительно, что в этом случае базовый класс является экземпляром другого шаблонного класса:
template
class Base { }; class Derived : Base { }; с использованием параметра шаблона производного класса в качестве аргумента шаблона (и теперь мы снова вернулись к исходному коду ...).
template
typename IntermittentQueue ::Node* IntermittentQueue ::getNode(const node_ptr nodePtr) { /* some other statements */ }; Это реализация одной из функций-членов шаблонного класса. Шаг за шагом:
template
// the class we are speaking off is a template class typename IntermittentQueue ::Node* // return value of the function IntermittentQueue ::getNode // function name with (template) class scope specified // (just as with SomeClass::someMemberFunction) (const node_ptr nodePtr) // function parameter(list) { /* some other statements */ }; // function body Хорошо, но тип возвращаемого значения может нуждаться в дополнительном объяснении:
typename IntermittentQueue
::Node* Функция возвращает указатель на объект типа внутреннего класса
Node
of (template) classIntermittentQueue
:IntermittentQueue
::Node* Поскольку внутренний тип является зависимым типом, вам необходимо явно указать компилятору, что это на самом деле является a вообще введите, для этого используется ключевое слово
typename
; для деталей: есть уже другой вопрос к теме.Здесь просто примечание: наличие typedef для указателей (
node_ptr
) является плохой практикой , это просто скрытие информации и не служит чему-то ценному (исключение: указатель служит дескриптором к какому-либо внутреннему ресурсу, и он не предназначен для разыменования где-либо за пределами - тогда допустимо явное скрытие природы указателя).
VBUnit работал хорошо на меня в бывшем клиенте на проекте VB6.
У меня был очень гладкий опыт TDD с помощью SimplyVBUnit. Я думал образец, с которым идет код, было довольно очевидно.
Ваша первоначально загруженная форма при запуске содержит управление. Затем в Form_Load sub Вы:
AddTest New TestDifferentAsserts
TestDifferentAsserts является vb классом. Это выглядит примерно так:
Public Sub TestFloatCompareTolerance()
' we will use the default tolerance of 0.00001
Assert.AreEqual 9#, 9.000001, "Should be equal!"
' The Expected value must be a Double or Single
' for the tolerance to be used in the comparison.
Assert.AreEqual 9, 9.000001, "This will fail because we didn't use a float for the expected value."
End Sub
На самом деле завтра я перезагружаю vb6 на своем компьютере для бездельничания на моем компьютере с simplyvbunit.
[ДОБАВЛЕННОЕ РЕДАКТИРОВАНИЕ]
Это - мой Проводник проекта в VB6:
Form1 - то, где управление simplyvbunit расположено.
Исходный код для этого проекта.
Если у Вас есть сторонние средства управления, кто заботится. Перенесите их с фасадом. Затем создайте тупик из фасада.
Если Вы нуждаетесь в дальнейшей помощи, оставляете комментарий.
Я нахожусь в ситуации, были, у нас есть огромное приложение VB6, которое находится на пути, который будет перемещен в.NET. Перемещенная версия является полностью протестированной единицей.
Подход, который мы проявили, является к модульному тесту приложением VB6 от.NET через взаимодействующий с COM. Основное преимущество, которое мы нашли до сих пор, состоит в том, что разработчики VB6 заканчивают тем, что изучили TDD (и все, что он подразумевает):
Это решение улучшает чрезвычайно качество кода перемещенной версии, поскольку они понимают, как к вещам архитектуры способом, который делает тестирование легче. Кроме того, существует потенциальная возможность использовать те же тесты на VB6 и версии.NET.
Не уверенный, если этим решением является over-architectured для Вашей проблемы. Необходимо оценить, применимо ли или подходит в ситуации.
С уважением.