防止TestNG硬编码组名称

时间:2017-07-24 04:56:33

标签: java testng

TestNG的群组名称通常是硬编码的,可能会降低软件的质量。我想知道如何防止硬编码组名称。

在TestCase.java中,是的,我可以使用静态的最终字符串,就像this post中提到的@JavaSoftwareTester一样。

public class TestType {
    private static final String GROUP_A = "GroupA";
    private static final String GROUP_B = "GroupB"

    /**
     * Avoid instantiation
     */
    private TestType() {
    }
}

但是,似乎这个最终的String不能在testNG.xml中使用,如:

<groups>
    <run>
        <!-- I don't want hard coded -->
        <include name = "GroupA" />
        <!-- but this is incorrect -->
        <include name = TestType.GROUP_A />
    </run>
</groups>

总结:我想防止硬编码组名称,但我找不到合适的机制。请详细说明如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用TestNG提供的Beanshell支持来执行此操作。

以下是你如何去做。

  • 首先通过添加here中的内容向beanshell库添加依赖项(这是必需的,因为TestNG仅将beanshell库作为可选依赖项引入)
  • 然后,您将如下所示定义一个beanshell作为您的方法选择器

<method-selector> <script language="beanshell"> <![CDATA[ import org.rationale.emotions.stackoverflow.qn45272885.TestClass; groups.containsKey(TestClass.GROUP_B); ]]> </method-selector>

请勿忘记在课程TestType中将常量公之于众。

要详细了解Beanshell与TestNG的集成,您可以参考我的博文here以及官方的TestNG文档here