3

问题描述:

作为一个单独的开发人员,我曾多次偶然发现:
有时在项目中,为了提高效率,而不是选择更清洁的方法,在生产代码中添加一些快速而肮脏的测试代码是有意义的。

虽然这听起来像是一个肮脏的解决方案,但请记住,当我只想快速检查某些内容时,我只是在谈论无论如何都应该丢弃的测试代码。

为了 100% 确保不要忘记再次取出这段代码,我想用编译时炸弹来保护它:
我的意思是一些代码、预处理器代码或任何基本上允许在一定时间跨度内编译的东西,例如半小时,然后在时间(半小时)结束后自动导致编译器错误。编译器错误会很好,因为它可以直接标记测试代码的位置。(例如,我可以将其作为此类一次性区域内的第一行)

因此,诸如“如果系统时间大于此特定日期时间则引发错误”之类的东西会很棒。

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

问题:

这样的定时炸弹可能吗?关于如何做到这一点的任何想法?
或者关于如何获得快速而肮脏的测试代码的效率并绝对确保不会忘记再次取出它的任何想法?

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

4

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
        }
于 2013-07-29T10:22:20.000 回答
0

一种选择是在构建时生成具有“当前时间”变量的文件,而不是简单地添加检查代码是否应该在特定时间后停止工作。

在构建时生成文件的可能方法 -如何在构建时将计算值放入 RESX C#

于 2013-07-26T23:54:13.173 回答