обертка printf функция, которая фильтрует согласно пользовательским настройкам

Как aku говорит, если Вы тестируете сервисные методы (т.е. кодируйте поведение), тогда Вы можете модульный тест, которые непосредственно и обходят инфраструктуру WCF. Конечно, если Ваш код зависит от классов контекста WCF (как OperationContext) тогда, я предлагаю представить обертки во многом как ASP.NET, который MVC делает для HttpContext.

Для тестирования возможности соединения, это будет зависеть от типа конечных точек, которые Вы настроили. В некоторых случаях можно просто саморазместить сервис WCF в модульном тесте (как Вы, был бы со службой Windows WCF), и протестируйте это.

Однако Вы, возможно, должны вращать веб-сервер Разработки ASP.NET или даже IIS, если Вы хотите протестировать поведение WCF, характерное для тех, которые размещают среды (т.е. SSL, методы аутентификации). Это становится хитрым и может начать требовать у конфигурации общей машины разработки и серверов сборки, но выполнимо.

18
задан wsd 27 January 2019 в 14:51
поделиться

3 ответа

Вы хотите вызвать vprintf () вместо printf (), используя аргументы переменной " varargs " возможности C.

#include <stdarg.h>

int write_log(int priority, const char *format, ...)
{
    va_list args;
    va_start(args, format);

    if(priority & PRIO_LOG)
            vprintf(format, args);

    va_end(args);
}

Для получения дополнительной информации см. что-то вроде this .

42
ответ дан 30 November 2019 в 06:19
поделиться

Я думаю, что идея Джеффа - правильный путь, но вы также можете сделать это с помощью макроса без использования vprintf. Для этого может потребоваться gcc:

#define write_log(priority,format,args...)        \
                  if (priority & PRIO_LOG) {      \ 
                      printf(format, ## args);    \
                  }

Проверьте здесь , чтобы узнать, как это работает.

6
ответ дан 30 November 2019 в 06:19
поделиться

Если вы хотите, чтобы определения PRIO_ * использовались как бит (используя | и &), вы должны дать каждому из них свой собственный бит:

unsigned short PRIO_HIGH = 0x0001;
unsigned short PRIO_NORMAL = 0x0002;
unsigned short PRIO_LOW = 0x0004;

Макрос можно улучшить, используя запись do {} while (0). Это заставляет вызовы write_log действовать больше как оператор.

#define write_log(priority,format,args...) do { \
    if (priority & PRIO_LOG) { \
        printf(format, ## args); \
    } while(0)
4
ответ дан 30 November 2019 в 06:19
поделиться
Другие вопросы по тегам:

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