有没有办法创建一个编译时定时炸弹来保护测试代码?

3

问题描述:

作为一个单独的开发人员,我已经多次遇到这种情况:
有时在项目中,为了效率考虑,选择在生产代码中添加一些快速粗略的测试代码,而不是选择更清晰地解决问题。

尽管听起来很不好,但请记住,我只是在谈论应该在任何情况下都将被丢弃的测试代码,我只是想快速检查某些东西。

为了确保100%不会忘记再次取出此代码,我想通过编译期时间线来保护它:
我的意思是一些代码片段,预处理器代码或基本上任何允许编译一定时间段的代码,例如半小时,然后在时间(半小时)结束后自动导致编译器错误。编译器错误非常好,因为它可以直接标记测试代码所在的位置。(我可以将其作为此类可抛弃区域的第一行)。

所以类似于“如果系统时间大于此特定DateTime,则引发错误”的任何内容都将很好。

我研究了预处理器(不太熟悉),但指令#if和#error似乎不是一个选项,因为#if期望符号而不是表达式。

问题:

是否可能进行这样的时间线?有任何关于如何做到这一点的想法吗?
或者任何关于如何获得快速粗略测试代码的效率,并确保绝对不能忘记将其拿出来的想法?

(运行时错误很容易,但如果不能进行编译时错误,则需要类似质量的东西。)


3
你想写一段生命周期为30分钟的代码吗? - Robert Harvey
举个例子,为了找出一个复杂的错误,增加睡眠时间来观察问题是否会恶化是有意义的。但这种做法绝不能出现在生产代码中,因为它并不需要像新开发分支那样大量的努力。请记住,这只是单个开发人员的情况。 - Jennifer Owens
1
在一个临时类中编写此类代码,不要放在源代码控制之内。 - Robert Harvey
2
附注:作为单一开发人员,并不意味着您无法在提交代码之前审查自己的代码。只需查看差异并还原您编写的任何测试代码即可,无需进行分支操作。 - Alexei Levenkov
1
我个人使用“//DEBUG: Explanation”注释。Resharper有一个工具,可以显示所有找到此注释的位置,但是当您想要检查这些是否已全部清理时,您也可以在整个解决方案中进行简单的文件搜索。 - Dan Bryant
显示剩余2条评论
2个回答

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
        }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接