gpt4 book ai didi

c# - 如何解决 ValidationRule 类属性中的转换问题?

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:48 24 4
gpt4 key购买 nike

我需要为 Web 应用程序中的用户角色创建一些测试。为了尽量减少描述,其中一项测试涉及检查是否为用户显示菜单条目。

对于此测试,我使用一个名为 UserRoles 的表,如下所示:

sUserName    bDoesntHaveMenuX
User1 1
User2 0
User3 1

bDoesntHaveMenuX 是位类型。

我有一个派生自 ValidationRule 的类,它根据 XPath 表达式检查页面中是否存在特定文本,以定位要查找文本的节点。这个类的公共(public)属性是:

string XPathExpression
string Text
bool FailIfFound

最后一个指示如果找到或找不到文本,规则是否应该失败。

在测试中,我为开头提到的表添加了一个数据源,称为 DS。对于我感兴趣的请求,我添加了一个验证规则类的新实例,具有以下值:

Text=MenuX
XPathExpression=//div[@id='menu']//td
FailIfFound={{DS.UserRoles.bDoesntHaveMenuX}}

不幸的是,这不起作用。原因似乎是数据绑定(bind)过程创建了一个上下文变量DS.UserRoles.bDoesntHaveMenuX 的值为“False”或“True”。该值是一个字符串,因此绑定(bind)会导致转换错误。

据我所知,我的选择是:

  1. 更改验证规则以接受 FailIfFound 的字符串。无效选项,有两个原因:这是一个 hack 并且在中使用了相同的规则其他地方。
  2. 制定一个将使用上述规则的新验证规则,并将 FailIfFound 实现为字符串。我也不喜欢这个,因为和上面一样的原因。这是一个黑客。
  3. 在传递数据之前对测试进行编码并进行适当的转换到验证规则。我不喜欢这个,因为我更喜欢只有在没有其他方法的情况下,才按编码进行测试。

这让我想到了这个问题。还有别的办法吗?

谢谢。

最佳答案

所以根本问题是您无法控制数据绑定(bind)如何处理“位”数据类型,并且它被转换为字符串而不是 bool 值。

我能想到的唯一解决方案(遗憾的是仍然有点hack,但不像将 FailIfFound 更改为字符串那么过分)是创建一个 WebTestPlugin,并在 PreRequestDataBinding 或 PreRequest 事件中,将值从字符串转换 bool 。不要忘记将插件添加到您的测试中(我犯了一个简单的错误)。

然后当验证规则被创建时,它应该选择漂亮的新 bool 值并正常工作。

例如

  string val = e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"].ToString();
e.WebTest.Context["DS.UserRoles.bDoesntHaveMenuX"] = (val == "True");

我实际上并没有尝试过这个......希望它有效。


编辑:第二轮......更好的解决方案

  1. 将 FailIfFound 属性更改为字符串(在您提到的子类中),以便它可以与数据绑定(bind)一起正常工作。
  2. 实现一个 TypeConverter,为规则的 PropertyGrid(True,False)中的属性提供有效值的下拉列表,因此在 GUI 中它看起来与将 FailIfFound 为 bool 值的规则相同。必要时您仍然可以在框中输入您自己的值(例如用于数据绑定(bind))。
  3. 将包含 TypeConverter 代码的 .dll 路径添加到测试项目的“引用”部分。

这就是我开始做的事情,它比必须在属性的编辑框中键入“True”或“False”要令人满意得多。

关于c# - 如何解决 ValidationRule 类属性中的转换问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7583096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com