【问题标题】:How do you test for a renamed partial method?如何测试重命名的部分方法?
【发布时间】:2011-06-30 15:03:45
【问题描述】:

我正在使用 Linq to SQL,它生成部分类和部分方法。然后,您通过在另一个部分类中手动实现您的自定义来扩展生成的代码。 L2S 为您提供的钩子之一是能够实现在属性更改时调用的部分方法。例如,如果你有一个名为“MyProp”的属性,那么你可以像这样实现一个分部方法:

' Given to you in the generator
Partial Private Sub OnMyPropChanged()
End Sub

' Manually implemented in my custom class
' I cannot specify that this is an implementation of a Partial, even though it is...
Private Sub OnMyPropChanged()
   Console.WriteLine("My prop changed... do something here")
End Sub

我遇到的问题是“MyProp”的名称现在已更改为“MyNewPropName”,所以现在生成器中的部分创建Partial Private Sub OnMyNewPropNameChanged(),但我的部分方法版本仍然具有旧名称。实际上,我现在有一个永远不会被调用的孤立私有方法,这意味着我的代码在运行时被破坏了。你将如何测试这样的东西,甚至更好 - 有没有办法指定我的 OnMyPropChanged() 版本是部分方法的实现,这样如果没有相应的部分方法,我会得到编译时中断在生成的代码中?

【问题讨论】:

    标签: c# vb.net linq-to-sql partial-classes


    【解决方案1】:

    通过使用静态分析(代码分析),当您的代码包含任何从未访问或仅设置过的内部(私有、freid、内部)成员时,您将收到警告/错误。 这可能有助于找到这样的星座。 (IIRC相关的错误代码是CA1811)

    【讨论】:

    • 没想过要绑定 FxCop 之类的东西来帮我检查一下。这样可行。谢谢!
    【解决方案2】:

    在我看来我不认为你可以。

    在设计器中更改属性的名称会导致重新创建自动生成的代码。

    最好的方法是在开始实现业务逻辑之前设计实体。在 Visual Studio 中创建单元测试,以测试正在执行的部分实现。 Visual Studio 中的单元测试甚至会为您提供代码覆盖率统计信息。

    希望对你有帮助

    【讨论】:

    • 您说“最好的方法是在开始实施业务逻辑之前设计您的实体”,但说您将拥有完美的前期设计或者事情永远不会改变是不太现实的.您还提到了单元测试,但您能否详细说明如何测试是否调用了私有部分方法?
    • 这些方法旨在使您能够以某种方式更改状态或自定义业务对象。因此,在您实现此方法时,您将知道调用该方法的效果或结果。在您的单元测试中,您将知道什么动作将触发可扩展性/部分方法,并且您知道您的方法将产生什么结果。测试结果
    猜你喜欢
    • 2015-01-20
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多