-
注解@Test
-
JUnit和TestNG都使用注解@Test将方法指定为测试。JUnit要求使用@Test对每个用作测试的方法进行注解,而TestNG同时允许在类级使用这个注解。以这种方式使用该注解时,除非特别指定,否则类中所有公有方法都被视为测试
-
@Test public class DirectionSpec { public void whenGetFromShortNameNThenReturnDirectionN() { Direction direction = Direction.getFromShortName('N'); assertEquals(direction, Direction.NORTH); } public void whenGetFromShortNameWThenReturnDirectionW() { Direction direction = Direction.getFromShortName('W'); assertEquals(direction, Direction.WEST); } }
-
DirectionSpec类指定了注解@Test,因此方法whenGetFromShortNameNThenReturnDirectionN 和 whenGetFromShortNameWThenReturnDirectionW都被视为测试。如果使用JUnit编写上述代码,需要给这两个方法都指定注解@Test。
-
-
注解@BeforeSuite、@BeforeTest、@BeforeGroups、@AfterGroups、@AfterTest和@AfterSuite
- 这几个注解都没有对应的JUnit注解。TestNG可使用XML配置将测试编组为套件。使用@BeforeSuite和@AfterSuite注解的方法分别在指定套件中的所有测试运行之前和之后运行。同样,使用@BeforeTest和@AfterTest注解的方法分别在测试类中的每个测试运行之前和之后运行。最后,TestNG测试还可组织为编组,而注解@BeforeGroups和@AfterGroups让你在指定编组中的所有测试运行之前和之后运行某些方法。
- 实现代码之后编写测试时,这些注解很有用,传统测试通常是作为一个独立的项目进行规划和编写的,而TDD要求我们每次编写一个测试,并确保一切都尽可能简单。最重要的是,单元测试必须能够快速运行,因此没有必要将它们分成套件或编组。测试的运行速度很快时,运行部分测试都是在浪费时间。例如,如果在15秒内能够运行所有测试,就没有必要运行部分测试。另一方面,如果测试的运行速度很慢,通常昭示着没有将外部依赖隔离。不管测试运行速度慢的原因是什么,都不能将运行部分测试作为解决方案,而应去修复问题。
- 另外,功能测试和集成测试通常运行速度更慢,必须以某种方式将测试分开。将每种测试作为一个独立的任务运行。
-
注解@BeforeClass 和@AfterClass
- 这些注解在JUnit和TestNG中的作用相同:被注解的方法将分别在当前类中的所有测试运行之前和之后运行。唯一的差别是,TestNG不要求这些方法是静态的。原因是这两个框架运行测试方法的方式不同:JUnit运行每个测试时都使用不同的测试类实例,因此要让这些方法可重用,必须将它们定义为静态的;而TestNG在同一个测试类实例中运行所有测试,因此不需要将这些方法定义为静态的
-
注解@BeforeMethod 和@AfterMethod
- 这些注解与JUnit注解@Before和@After等价,被注解的方法将在每个测试运行之前和之后运行
-
注解参数@Test(enable = false)
- JUnit和TestNG都能够禁用测试。为此,JUnit使用独立的注解@Ignore,而TestNG使用注解@Test的布尔参数enable。从功能上说,这两种做法的工作原理相同,唯一的差别是编写方式。
-
注解参数@Test(expectedExceptions = SomeClass.class)
- 在这个方面,JUnit占据了优势。虽然这两个框架提供的指定期望异常的方式相同(在JUnit中,参数为expected),但JUnit引入了更优雅的异常测试方式——规则
03-15
132