posts - 32,comments - 75,trackbacks - 0

3.         TestNG 的灵魂

配置文件(testng.xml

Junit中要定义测试任务是要写TestSuit的,居然要写硬编码,而TestNG全部写在testng.xml(名字可以自定义的)中的,然后可以通过ant来调用。

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="my suite">

<test name="test1">

       <groups>

       <run name="group1">

       </run>

       </groups>

<classes>

<class name="ClassA"  />

</classes>

</test>

<test name="test2"  >

       <groups>

       <run name="group2">

       </run>

       </groups>

<classes>

<class name="ClassB"/>

<class name="ClassC"/>

</classes>

</test>

</suite>

上面包含了配置文件的基本的主干,一个配置文件只有一个Suite,基本上一个项目写一个配置文件就可以了,当然如果你的项目足够大,可能需要几个配置文件。测试是按照从大到小的顺序进行的,先执行suitetestclass,其中的groupclass是平级的,在讲group的时候再详细的解释。有了这个文件,我们就可以很清楚的理解@configuration里面的类型

public boolean beforeSuite() default false;

public boolean afterSuite() default false;

 

public boolean beforeTest() default false;

public boolean afterTest() default false;

 

public boolean beforeTestClass() default false;

public boolean afterTestClass() default false;

 

public boolean beforeTestMethod() default false;

public boolean afterTestMethod() default false;

从字面意思可以看出方法的执行顺序,唯一的疑惑是执行的次数,官方的文档的解释是相当让人疑惑的,好在我们可以自己测试,beforeTestMethod是当类中任何方法调用都要执行的,beforeTestbeforeTestClass在一个Test中是只执行一次的(没试过把2个相同的类写到一个Test里面),而beforeSuite在一个配置文件中只执行一次。上面都没有考虑分组的情况,分组会更加的复杂,似乎灵活过头了,但是考虑到项目的复杂性,每个测试方法的初始化都可能不同,现在我们做的项目要求每天要将单元测试写进daily buildbuild文件里面自动执行,似乎只有用TestNG这样灵活的配置才能达到。

 

4.         分组

将一个测试方法或者配置方法分组是很容易的。

@Configuration(beforeTestClass=truegroups=“group1)

@Test(groups=”group1”)

只要象上面写就可以了,名字随便取,而且不需要预先定义。

我们在一个类做2个组,看看效果

@Configuration(beforeTestClass=truegroups=“group1)

Public void C1(){}

@Test(groups=”group1”)

Public void T1(){}

@Configuration(beforeTestClass=truegroups=“group2)

Public void C2(){}

@Test(groups=”group2”)

Public void T2(){}

只选group1

…………………

       <groups>

       <run name="group1">

       </run>

       </groups>

…………

       执行C1        T1

 

只选group2

…………………

       <groups>

       <run name="group2">

       </run>

       </groups>

…………

执行C2        T2

 

2个都选

…………………

       <groups>

<run name="group1">

       <run name="group2">

       </run>

       </groups>

…………

我最先以为的顺序是C1        T1       C2        T2  A

然而实际上是  C1        C2        T1        C1        C2        T2 B

要想达到(A)的效果,只能把2group分开了放在不同的Test里面,其实只要知道一点,TestNG是先找Class,然后才去找Group的。

posted on 2005-12-14 14:25 fanta 阅读(1625) 评论(1)  编辑  收藏 所属分类: Java

FeedBack:
# re: TestNG 与 Junit的比较(二)
2005-12-15 09:15 | esmiles
继续观注.原来对TestNG并没有在意.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: