2011-08-18 26 views
0

我正在编写单元测试,我需要重写“static const char [] path =”/ some/hardcoded/path“中的路径来执行其他操作。我想它可以通过LD_PRELOAD做,但它要求我创建另一个库是否有任何其他简单的方法来做到这一点替换静态常量字符数组的值

+6

它是'const'。不要这样做。如果您有一些功能需求,请联系作者并提出您的看法。否则,处理它。抱歉。 –

+0

我同意。应该拍摄硬编码路径的人! –

回答

1

躲在它的选择是这样的:??

static const char* path = "..."; 

void f() 
{ 
#if UNIT_TESTING 
    static const char* path = "Ha!"; 
#endif 
    cout << path; 
} 
0

更改在许多系统中,实现定义的响应是放弃核心(分段错误),也就是说,许多联合国以前常见的范例IX应用程序应具有硬编码但可配置的路径名。这个名字是在编译时设置,而不是执行时间:

static const char * path = SOME_PREPROCESSOR_NAME; 
3

注释出来,并添加你自己的路。

你不想un- const东西。

如果需要,把它变成一个预处理块:

#ifndef __UNIT_TEST 
    static const char[] path = "/some/hardcoded/path"; 
#else 
    static const char[] path = "/some_other/hardcoded/path"; 
#endif 

然后,它会不会原来的程序员的系统上出现故障或者。

0

如果你想成为哈克,并没有办法直接更改信号源,它可以使用的mprotect()在Unix和Win32上VirtualProtect的(),以使该阵列可读/写的页/可执行文件最后的手段。

0

如果您的系统支持它,请将硬编码文件作为您想要的符号链接。类似于ln -T /where/i/want/file /some/hardcoded/path/file