【问题标题】:Force compile error when obsolete method is used in another obsolete method在另一个过时方法中使用过时方法时强制编译错误
【发布时间】:2013-05-01 15:05:36
【问题描述】:

我正在为 DotNet 4.0 中的 Fitnesse 编写一些固定代码,并希望保护我的 api 方法不被用于代码库中。我认为这可以使用 [Obsolete] 属性来完成,但是如果您在另一个标记为过时的方法中使用过时的方法,这不会产生编译错误。

[Obsolete("Used only externally", true)]
public void Method1() {
}

[Obsolete("Used only externally", true)]
public void Method2() {
    Method1();
}

我希望上面的代码生成一个编译错误。有没有其他方法可以解决这个问题?最好在 DotNet 框架内?

【问题讨论】:

    标签: .net fitnesse acceptance-testing


    【解决方案1】:

    您不应该将您的夹具代码放入您想要测试的程序集中。相反,您应该为您的夹具代码创建一个单独的项目。夹具代码应使用与程序集的其他客户端相同的公共 API 访问您的“被测系统”。

    而您在 FitNesse 中编写的测试只能访问夹具组件。

    +----------------+    +-----------------+    +-------------------+
    | FitNesse Tests | -> | Fixture Assembly| -> | System under test |
    +----------------+    +-----------------+    +-------------------+
                                                       ^
                           +----------------+          |
                           | Other Clients  | ---------+
                           +----------------+
    

    【讨论】:

    • Fixture 代码正在包装 Selenium Web 驱动程序。如果我将逻辑分成两个单独的程序集,我会遇到同样的问题,主要是我想强制执行一个规则,即给定程序集中的方法不能相互调用。
    【解决方案2】:

    您没有给出您的用例的真实示例,但如果您想保护您的 API 方法不被其他程序集调用,为什么不使用 internal 访问修饰符?

    http://msdn.microsoft.com/en-us/library/7c5ka91b.aspx

    【讨论】:

    • 我试图抽象出用例。我想要这个的原因是,对于我暴露给 Fitnesse 的每种方法,我都必须添加一些样板代码。 1) 将所有内容都包装在 try catch 中。 2)在做任何工作之前调用相同的方法。 3)翻译异常,以便fitnesse以不同的方式显示它。从另一个调用这些特殊方法之一会破坏事情。
    • @JoshuaJewell - 我现在明白了,真正的问题是您将代码直接添加到库中只是为了测试它。您根本不应该这样做,添加Obsolete 属性只是解决问题的创可贴。如果您在 OP 中包含更多细节,也许人们可以提供另一种方法。
    • 您能解释一下为什么需要特殊方法从 FitNesse 调用吗?一般来说,FitNesse 和您的夹具代码应该调用属于您的正常生产代码一部分的方法。在 FitNesse 方面,可能还有其他方法可以完成您所需要的。
    • 我的夹具代码正在使用 Selenium Web 驱动程序,并通过在 Fitnesse 测试结果中提供屏幕截图链接等内容来扩展其功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多