TestNG dependsOnMethods from different class

DependsOnMethods cannot be used from different class ,To resolve this we can use dependsOnGroups;

Do code change in;

1. dependsOnGroups class;

@Test(groups={"prerequisites" })

public void M1()
{

}

2. class which calls dependsOnGroups;

@Test(dependsOnGroups={"prerequisites"})
public void M2()

{

}

3. xml

<groups>
    <run>
        <include name ="prerequisites"/>
    </run>
</groups>

You can use groups and dependsOnGroups in the TestNG @Test annotation, as described in earlier answers.

However, both classes need to be under the same <test>.

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

<suite name="Suite" verbose="1" >
  <test name="Test" >
    <classes>
       <class name="c1" />
       <class name="c2" />
    </classes>
  </test>
</suite>

The following will result in an exception when running the test suite.

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

<suite name="Suite1" verbose="1" >
  <test name="Test1" >
    <classes>
       <class name="c1" />
    </classes>
  </test>

  <test name="Test2">
    <classes>
      <class name="c2" />
    </classes>
  </test>
</suite>

Put the method in a group and use dependsOnGroups.

class c1 {
  @Test(groups={"c1.verifyConfig"})
  public void verifyConfig() {
    //verify some test config parameters
  }
}

class c2 {
  @Test(dependsOnGroups={"c1.verifyConfig"})
  public void dotest() {
    //Actual test
  }
}

It is recommended to verify configuration in a @Before* and throw if something goes wrong there so the tests won't run. This way the tests can focus on just testing.

class c2 {
  @BeforeClass
  public static void verifyConfig() {
    //verify some test config parameters
    //Usually just throw exceptions
    //Assert statements will work
  }

  @Test
  public void dotest() {
    //Actual test
  }
}