javaseleniumtestngtestng.xmltestng-annotation-test

IAnnotation transform method is not disabling the test in testng


Here my intention is , Based on the before method condition the @Test method needs to enabled or disabled But in the below code even though I am passing the test case name its not getting skipped ? Can anyone suggest me solution?

I need the BeforeTestMethod to check some logic in my actual code and based on that I have to enable the @Test in the class file

public class ListnerClass implements IAnnotationTransformer {
public static String  testName;
public void transform(ITestAnnotation iTest, Class testClass, Constructor testConstructor, Method method) {
    if(method.getName().equalsIgnoreCase(testName)) {
        iTest.setEnabled(false);
    }
    
}

public class TestNGTest3 {
@BeforeMethod
public void setUp(Method result) {
    System.out.println("This is the before Method getting name "+result.getName());
    if(result.getName().contains("3")) 
       {
        ListnerClass.testName=result.getName();

    }
}

@Test
public void testMethod3() {
    System.out.println("This is the Method of Method");
}

@Test
public void testMethod4() {

    System.out.println("Hi");
}


    
}

TestNG.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name=" Regression Suite">
    <listeners>
    <listener class-name="com.listners.ListnerClass" />
    </listeners>
    <test thread-count="1" name="Test">
    <classes>
        <class name="com.test.TestNGTest3" />
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

Output:

This is the before Method getting name testMethod3
This is the Method of Method
This is the before Method getting name testMethod4
Hi

Solution

  • Finally I have achieve my intention with the help of the below post.

    Why is throw new SkipException() skipping all my methods?

    Here is an working sample:

     public class TestClassTest {
     static String name;
     static int i=0;
    `public static String testmethod() {        
        List<String> list= new ArrayList<String>();
        list.add("Raja");
        list.add("Raju");
        list.add("Raj");
        name=list.get(i);
        i++;
        return name;
        
        
    }
    
    
     public class DependsOnMethodClass extends TestClassTest {
    
    @BeforeMethod()
    public void beforecaller(Method m) {    
    if(!testmethod().equals("Raju")) {
        System.out.println("This is the method going to be skipped
    "+m.getName());
        throw new SkipException("Data provided is not matching");
    
    
    }
    else {
        System.out.println("This is the method not skipped"+m.getName());
    }
    

    }

    @Test
    public void getCall() {
    System.out.println("This is the getCall method");
    

    }

    @Test()
    public void getCall1() {
    System.out.println("This is the getCall1 method");
    }
    }
    

    Update of TestNG xml: (Important Change) Adding the parameter configfailurepolicy="continue" will continue the test even we are throwing skip exception.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" configfailurepolicy="continue">
    <test thread-count="5" name="Test">
    <classes>
      <class name="com.testng.newsuite.DependsOnMethodClass"/>
    </classes>
    </test> <!-- Test -->
    </suite> <!-- Suite -->
    
    Output:
    This is the method going to be skipped getCall
    This is the method not skipped getCall1
    This is the getCall1 method