【问题标题】:Running JUNIT Test Suites in a specifc order using ANT使用 ANT 以特定顺序运行 JUNIT 测试套件
【发布时间】:2010-02-22 04:46:52
【问题描述】:

在下面的例子中,

   1. <target name="tests.unit">  
   2.   <junit>  
      3.     <batchtest>  
      4.       <fileset dir="tsrc">  
      5.         <include name="**/Test*.java"/>  
      6.         <exclude name="**/tests/*.java"/>  
      7.       </fileset>  
      8.     </batchtest>  
      9.   </junit>  
     10. </target>  
     11. <target name="tests.integration">  
     12.   <junit>  
     13.     <batchtest>  
     14.       <fileset dir="tsrc">  
     15.         <include name="**/tests/Test*.java"/>  
     16.       </fileset>  
     17.     </batchtest>  
     18.   </junit>  
     19. </target>  

如果我在 **/tests/ 文件夹中有多个 TestSuite。如果我运行 tests.integration 目标,它如何知道首先运行哪个测试套件?如果我有 TestSuite1.java、TestSuite2.java 和 TestSuite3.java,我希望测试套件按照文件名中指定的顺序运行。

【问题讨论】:

    标签: ant junit


    【解决方案1】:

    您可以创建一个基础测试类,将登录名放在其setUp() 中,并从该类继承您的所有测试用例(当然,在任何地方都调用super.setUp())。

    请注意,这只是一个简单的登录,而不是正确的单元测试。您应该在单独的测试类中使用所有可能的疯狂用户输入和诸如此类的东西对您的登录功能进行单元测试,但对于其余的测试用例,您只需要使用默认用户名或其他东西进行简单的简单登录。

    对于那些除了登录之外还需要产品的测试用例,您可以创建第二个基础测试类,它扩展第一个基础测试类并将产品创建添加到其setUp()

    无代码重复 - 如果登录更改,除了登录测试用例本身之外,您还需要更改测试代码中的单个方法。

    以这种方式执行 5000 个单元测试可能会更慢 - 但要安全得多。如果您开始依赖于单元测试的执行顺序,那么您就踏上了滑坡。如果它们的顺序由您的配置固定,那么很难注意到您无意中在两个单元测试之间引入了额外的依赖关系。例如。您在一个单元测试中设置产品的特定属性或更改全局配置设置,然后在下一个测试用例中在您的产品上测试其他东西 - 它恰好起作用,因为之前的单元测试设置了特定的东西方法。这迟早会导致令人讨厌的惊喜。

    【讨论】:

      【解决方案2】:

      除非 JUnit 中有新功能,否则这是一件很难做到的事情。

      TestNG 可以通过依赖组来管理它。

      这里有一个问题要问您:为什么顺序很重要?单元测试不应该有依赖关系。如果你这样做,也许这些真的是集成测试。

      FitNesse 可能是更好的选择。

      【讨论】:

        【解决方案3】:

        是的,我正在尝试为功能测试而不是单元测试创​​建测试套件。我正在尝试使用 junit 来构建功能测试包。我正在使用基于 Junit 的 selenium。

        假设我有一个网站,如果不登录就无法进行任何操作。在这种情况下,我有一个测试登录功能的测试用例,然后我将有另一个测试用例来测试其他东西。他们将执行的顺序很重要,因为我在登录之前无法测试任何东西,这意味着顺序应该是

        1. 测试登录
        2. TestCreateProduct
        3. TestReadProduct

        在上述测试用例中,我无法在创建产品之前读取任何产品,并且我已经登录并且在我登录之前我无法创建产品。我见过很多关于使用 setUp() 和 tearDown() 方法的 cmets,但这肯定意味着很多重复。

        例如,如果我必须使 TestReadProduct 测试用例独立,我必须将 TestLogin 和 TestCreateproduct 功能放在 TestCreateProduct 测试用例的 setUp() 方法中。这无疑是一场维护噩梦。想象一下必须维护 5000 个测试用例。如果 TestLogin 功能发生变化,我将不得不在很多地方进行大量更改。

        我正在考虑在 ANT 中使用“依赖”选项。

        类似的东西

        <target=TestReadProduct depends=TestLogin, TestCreateProduct>
        

        没有更好的方法吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-04
          • 2020-02-27
          • 2018-06-11
          相关资源
          最近更新 更多