Как aku говорит, если Вы тестируете сервисные методы (т.е. кодируйте поведение), тогда Вы можете модульный тест, которые непосредственно и обходят инфраструктуру WCF. Конечно, если Ваш код зависит от классов контекста WCF (как OperationContext) тогда, я предлагаю представить обертки во многом как ASP.NET, который MVC делает для HttpContext.
Для тестирования возможности соединения, это будет зависеть от типа конечных точек, которые Вы настроили. В некоторых случаях можно просто саморазместить сервис WCF в модульном тесте (как Вы, был бы со службой Windows WCF), и протестируйте это.
Однако Вы, возможно, должны вращать веб-сервер Разработки ASP.NET или даже IIS, если Вы хотите протестировать поведение WCF, характерное для тех, которые размещают среды (т.е. SSL, методы аутентификации). Это становится хитрым и может начать требовать у конфигурации общей машины разработки и серверов сборки, но выполнимо.
Вы хотите вызвать 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 .
Я думаю, что идея Джеффа - правильный путь, но вы также можете сделать это с помощью макроса без использования vprintf. Для этого может потребоваться gcc:
#define write_log(priority,format,args...) \
if (priority & PRIO_LOG) { \
printf(format, ## args); \
}
Проверьте здесь , чтобы узнать, как это работает.
Если вы хотите, чтобы определения 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)