Похоже, что Linq, о котором все здесь говорят, это просто LinqToObjects. Который, я полагаю, предлагает только функциональность, которая уже может быть реализована сегодня в Java, но с действительно уродливым синтаксисом.
Реальная сила Linq в .Net заключается в том, что лямбда-выражения можно использовать в контексте, требующем либо делегата, либо выражения, и затем они будут скомпилированы в соответствующую форму. Это то, что позволяет таким вещам, как LinqToSql (или что-либо кроме LinqToObjects), и позволяет им иметь синтаксис, идентичный LinqToObjects.
Похоже, что все проекты, упомянутые выше, предлагают только возможности LinqToObjects. Что заставляет меня задуматься о том, что функциональность типа LinqToSql не стоит на пороге Java.
Предполагая, что вы имеете в виду защищенный метод общедоступного класса:
В тестовом коде определите производный класс тестируемого класса (напрямую или из одного из его производных классов). Добавьте аксессоры для защищенных членов, или выполнить тесты в производном классе. «Защищенный» контроль доступа не так уж и страшен в C ++: он не требует взаимодействия базового класса, чтобы «взломать» его. Так что лучше не вводить в базовый класс никакой «тестовый код», даже объявление друга:
// in realclass.h
class RealClass {
protected:
int foo(int a) { return a+1; }
};
// in test code
#include "realclass.h"
class Test : public RealClass {
public:
int wrapfoo(int a) { return foo(a); }
void testfoo(int input, int expected) {
assert(foo(input) == expected);
}
};
Test blah;
assert(blah.wrapfoo(1) == 2);
blah.testfoo(E_TO_THE_I_PI, 0);
Объявить класс друга MyClass_UnitTest; в вашем MyClass. Затем вы можете определить MyClass_UnitTest в другом месте вашей программы модульного тестирования, которое имеет полный доступ к внутренним компонентам MyClass, но вам не нужно предоставлять реализацию в своем выпускном приложении. См. Документацию CppUnit , чтобы увидеть хороший пример того, как это делается.
Рассмотрим общедоступную, возможно статическую функцию «модульного тестирования».
Уродливо, но лучше, чем альтернативы, которые я могу придумать, используя макросы, друзей или что-то подобное.
Я использую CxxTest , и CxxTest является производным от класса, содержащего защищенную функцию-член. Если вы все еще ищете свою любимую среду модульного тестирования C ++, прочтите эту статью .