Как делают меня модульный тест защищенный метод в C++?

Похоже, что Linq, о котором все здесь говорят, это просто LinqToObjects. Который, я полагаю, предлагает только функциональность, которая уже может быть реализована сегодня в Java, но с действительно уродливым синтаксисом.

Реальная сила Linq в .Net заключается в том, что лямбда-выражения можно использовать в контексте, требующем либо делегата, либо выражения, и затем они будут скомпилированы в соответствующую форму. Это то, что позволяет таким вещам, как LinqToSql (или что-либо кроме LinqToObjects), и позволяет им иметь синтаксис, идентичный LinqToObjects.

Похоже, что все проекты, упомянутые выше, предлагают только возможности LinqToObjects. Что заставляет меня задуматься о том, что функциональность типа LinqToSql не стоит на пороге Java.

16
задан Kevin Reid 16 December 2015 в 21:16
поделиться

4 ответа

Предполагая, что вы имеете в виду защищенный метод общедоступного класса:

В тестовом коде определите производный класс тестируемого класса (напрямую или из одного из его производных классов). Добавьте аксессоры для защищенных членов, или выполнить тесты в производном классе. «Защищенный» контроль доступа не так уж и страшен в 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);
24
ответ дан 30 November 2019 в 16:24
поделиться

Объявить класс друга MyClass_UnitTest; в вашем MyClass. Затем вы можете определить MyClass_UnitTest в другом месте вашей программы модульного тестирования, которое имеет полный доступ к внутренним компонентам MyClass, но вам не нужно предоставлять реализацию в своем выпускном приложении. См. Документацию CppUnit , чтобы увидеть хороший пример того, как это делается.

2
ответ дан 30 November 2019 в 16:24
поделиться

Рассмотрим общедоступную, возможно статическую функцию «модульного тестирования».

Уродливо, но лучше, чем альтернативы, которые я могу придумать, используя макросы, друзей или что-то подобное.

0
ответ дан 30 November 2019 в 16:24
поделиться

Я использую CxxTest , и CxxTest является производным от класса, содержащего защищенную функцию-член. Если вы все еще ищете свою любимую среду модульного тестирования C ++, прочтите эту статью .

2
ответ дан 30 November 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: