首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试中的条件断言是反模式吗?

测试中的条件断言是反模式吗?
EN

Stack Exchange QA用户
提问于 2016-02-28 12:07:10
回答 2查看 370关注 0票数 1

我审查的测试通常包含以下模式

代码语言:javascript
运行
复制
@Test
public void test() {

  if (systemIsInStateA()) {
    assertThat(system, shouldPerformInWay(X));
  } else {
    assertThat(system, shouldPerformInWay(Y));
  }
}

这是反模式吗?

在我看来,这似乎是一种反模式,因为系统是否处于状态A中,似乎超出了测试的控制范围,而且可能发生的情况是,测试只涵盖一条执行路径。相反,我期望一个测试将被测试的系统移动到状态A来测试第一个路径/断言,状态B来测试后者。

我想知道是否有这种模式是合理的情况?

EN

回答 2

Stack Exchange QA用户

回答已采纳

发布于 2016-02-29 13:56:48

您可以为整个组件的“烟雾测试”的目的将测试场景设置为条件,以表明在任何情况下,当您无法控制该情况以及哪一种变体将“出现”时,您都可以通过测试。

但是对于详细的测试,您应该记住,应该至少测试两种变体一次。

如果这是由测试数据或应用程序的任何其他外部选项或行为引起的,则没有具体说明是什么导致了变体。

如果它完全超出了您的控制范围,您应该在循环中对其进行测试,直到所有可用的变体都“通过”为止。如果您不这样做,它可以从某种角度被视为反模式,或者您应该将自动测试结果表示为部分结果。

票数 1
EN

Stack Exchange QA用户

发布于 2016-02-28 13:42:07

您的示例(没有进一步的上下文)看起来更好,如下所示:

代码语言:javascript
运行
复制
@Test
public void testStateA() {
    assertThat(system, shouldPerformInWay(X));
}

@Test
public void testStateB() {
    assertThat(system, shouldPerformInWay(Y));
}

它看起来像是两种不同的场景,所以请这样测试它们。如果您的原始代码失败(在方法shouldPerformInWay中),您甚至不知道这两种情况中的哪一种失败--或者您必须提供额外的日志记录或调试。

当然,在使用数据驱动测试时,您必须在代码逻辑和数据可变性之间保持一定的平衡。

我不知道这是否适用于您的示例,如果没有代码,我的解释是否清晰,但是让我们假设我们正在测试登录屏幕。

极端一方面:复杂的数据(确定要遵循的逻辑),复杂的代码。在这里,您可能有一个测试方法(简单),并且基于数据,PageObject必须执行它的逻辑:检查是否有完整的登录或错误消息,或者.因此,您的代码(PageObject)是复杂的,因为它必须为预期的行为解析数据(例如:我的数据源是否提供了错误消息?)数据本身也必须提供预期的结果。

另一方面是极端:简单的数据,许多测试用例(针对每个结果)。在这里,您可能有许多测试方法(每个可能的场景都有一个),每个测试方法都接受特定的数据输入。所以数据很简单,因为它不包含任何逻辑。测试方法可能是重复的,但对于它们所做的事情却很清楚。与前一种情况相比,PageObjects本身没有太多的逻辑,因为它们不必为行为解析数据。

票数 1
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/17314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档