2

我有一堆自动生成的代码(来自 Ranorex GUI 测试工具),它们公开了一个公共界面,如下所示:

public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder
{
  // Ranorex.Button exposes public methods like Click()
  public virtual Ranorex.Button ButtonYes
  {
    get
    {
      return _buttonyesInfo.CreateAdapter<Ranorex.Button>(true);
    }
  }
}

我的问题是我正在编写一个看起来像下面的代码的中间层,我希望该代码的用户不会通过直接调用自动生成的代码来绕过它(这很可能会破坏复杂的业务规则)

public class MyAdapter
{
  private MessageBoxPopupAppFolder _myMessageBox;

  public static void Acknowledge()
  {
    // some complex business rules
    _myMessageBox.ButtonYes.Click();
  }
}

我有一些解决方案,但似乎没有一个真正令人满意:

  • 手动(或通过脚本)修改自动生成的代码以更改 Ranorex 方法的可见性。这意味着需要进行一些命名空间重构,并且难以通过代码重新生成来维护
  • 将此代码链接到一个完全独立的二进制文件中,并通过一个真正私有的 API 与之通信。前面还有很多工作
  • 实现某种代码自我评估,以检测并报告(作为单元测试失败)对该 API 的任何“禁止”使用

我能做什么?

澄清一下:我不关心我的中间件保密,只需要控制实际点击的正确顺序。

编辑:我想向我的团队成员(我的中间件用户)公开的是面向业务的 API(如Acknowledge())。这可以。不好的是我无法阻止 Ranorex 原始 API ( Button.Click()) 出现。

4

3 回答 3

1
  1. 如果你想安全,你最好的选择是你的第一个,使用脚本来修改自动生成的代码。将脚本添加到您的集成构建过程中,以确保此获取始终运行,以防代码重新生成。

  2. 否则,您可以设置 FxCop 规则来检测您不想使用的方法调用。

  3. 如果团队很小并且他们对遵循设计指南感到满意。那么这是训练团队不使用 API 的问题。在您的代码审查过程中,您的团队将不得不寻找这个问题。缺点是这只是一种预防措施,您的团队成员仍然可能犯错误。在这种情况下,QA 和代码审查将是你最好的朋友。

于 2013-01-15T00:56:29.993 回答
0

Ranorex 不支持修改生成成员的可见性?

第一个绝对听起来像是要走的路,因为它似乎直接就是您要寻找的东西。

于 2013-01-14T23:22:11.630 回答
0

在我看来,您对设计“太深”了,无法用优雅且完全干净的解决方案来解决这个问题。所有替代方案都有自己的缺点,我可以建议的一个是为您在自己的类中公开的 Ranorex 类型提供一个适配器/外观类。然后这些适配器会处理一些逻辑,然后将调用路由到真正的底层 Ranorex 对象。在您的Acknowledge示例中,这将是适配器上的一个方法,而您公开的公共类型将只是适配器。

理想情况下,我希望在 Button 类中有一个 Click 事件,以便您可以听到它并做出相应的反应。

于 2013-01-14T23:28:42.593 回答