问题描述:
作为单一开发者,我偶然发现了几次:
有时在项目上而不是选择更简洁的方法,出于效率原因,只需在生产代码中添加一些快速且脏的测试代码就有意义。
要100%确定不要忘记再次使用此代码我想通过编译时间炸弹来保护它
我的意思是一些代码,预处理器代码或任何基本上允许编译一定时间跨度的东西,例如半小时,然后在时间(半小时)结束后自动导致编译器错误。编译器错误会很好,因为它可以直接标记测试代码的位置。 (例如,我可以将它作为这样的一次性区域中的第一行)
所以像“如果系统时间大于这个特定的DateTime就抛出错误”就好了。
我查看了预处理器(不太熟悉它),但指令#if和#error似乎不是一个选项,因为#if需要符号而不是表达式。
问题:
这样的定时炸弹可能吗?关于如何做到这一点的任何想法?
或者任何关于如何获得快速和肮脏的测试代码效率的想法,并且绝对确保再次取出它不能忘记?
(运行时错误很容易,但如果编译时错误不可能,我需要一些类似于它的东西。)
答案 0 :(得分:1)
我个人认为,时间戳是错误的做法。使用构建目标来区分代码使用的不同目的。
// Constructor call will only be allowed for target DEBUG
public class Protect : IDisposable
{
#if DEBUG
[Obsolete("error", false)]
#else
[Obsolete("error", true)]
#endif
public Protect()
{
}
public void Dispose()
{
}
}
用法
using (new Protect())
{
// do some testcode
// will only compile in DEBUG mode
}
答案 1 :(得分:0)
一个选项是生成在构建时具有“当前时间”变量的文件,而不是简单地添加检查代码应该在特定时间后停止工作。
在构建时生成文件的可能方法 - how to put computed value in RESX at build time C#