Экспериментировал с аннотациями в TestNG и натолкнулся на интересную проблему с аннотацией AfterGroups.
Мой testng.xml сконфигурирован таким образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite"> <!-- Suite -->
<test name="Suite Test1"> <!-- Test -->
<groups>
<run>
<include name="japan" />
<include name="auto" />
<exclude name="russian" />
</run>
</groups>
<classes>
<class name="groups_samples.GroupsTest" /><!-- Class -->
</classes>
</test><!-- Test -->
</suite> <!-- Suite -->
мой тест выглядит так:
package groups_samples;
import org.testng.Assert;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
public class GroupsTest {
@BeforeGroups(groups = { "auto" })
public void setUp() {
System.out.println("BeforeGroups. It's running before groups");
}
@AfterGroups(groups = { "auto" })
public void cleanUp() {
System.out.println("AfterGroups. It's running after groups");
}
@Test(groups = { "auto", "german" })
public void BMW() {
System.out.println("BMW");
}
@Test(groups = { "auto", "german" })
public void VW() {
System.out.println("VW");
}
@Test(groups = { "auto", "japan" })
public void Nissan() {
System.out.println("Nissan");
}
@Test(groups = { "german" })
public void Bretzel() {
System.out.println("Bretzel");
}
@Test(groups = { "japan" })
public void Sushi() {
System.out.println("Sushi");
Assert.assertTrue(false);
}
@Test(groups = { "auto" }, dependsOnGroups = { "japan" })
public void Kia() {
System.out.println("Kia");
}
@Test(groups = { "auto" })
public void Hundai() {
System.out.println("Hundai");
}
@Test(groups = { "auto", "russian" })
public void Lada() {
System.out.println("Lada");
}
}
идея в том, что должны раниться группы методов auto и japan, при этом если метод из группы russian то он не должен раниться. Один метод (Kia) зависит от группы japan - если хоть один метод из группы japan зафейлился, то он должен скипаться.
Эта часть работает как ожидается.
Но я еще добавил аннотации @BeforeGroups(groups = { "auto" })
и @AfterGroups(groups = { "auto" })
Так вот почему-то AfterGroups не ранится, хотя запускаются 5 тестов из этой группы и один скипается. Методом эксперимента удалось выяснить что AfterGroups не ранится если один из тестов той группы для которой он предназначен скипается. Я не вижу логики в этом - для меня похоже на баг. Кто-то может пояснить, почему не ранить AfterGroups в случае, если скипнулся один из тестов этой группы(не все!)