有什么方法可以创建编译时间炸弹来保护测试代码?

时间:2013-07-26 23:46:34

标签: c# visual-studio

问题描述:

作为单一开发者,我偶然发现了几次:
有时在项目上而不是选择更简洁的方法,出于效率原因,只需在生产代码中添加一些快速且脏的测试代码就有意义。

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

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

所以像“如果系统时间大于这个特定的DateTime就抛出错误”就好了。

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

问题:

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

(运行时错误很容易,但如果编译时错误不可能,我需要一些类似于它的东西。)

2 个答案:

答案 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#