How to use Return in TestNG Methods: We have seen in Java that a method can return some value after processing the data; similarly, here we will try to learn whether a test method can return value in a testNG class.
package com.softwaretestingo.testng; import org.testng.annotations.Test; public class TestMethodWithReturnStatement { // A @Test method which is returning a value will be ignored by TestNG @Test public String returnMethod() { System.out.println("Returning Method"); return "SoftwareTestingo"; } @Test public void normalMethod() { System.out.println("Normal Method"); } }
When we execute the above testng class, in the output, you can see in tests, run showing one whereas we have two methods. That means if we use the return statement inside a testNG method, then that method is skipped by testNG.
Output:
Normal Method PASSED: com.softwaretestingo.testng.TestMethodWithReturnStatement.normalMethod =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 ===============================================
How to Call Other Test Method?
Similarly, we will learn another new thing: can we call a test method from another test method?
In response to the above question, we can call a test method from another test method.
package com.softwaretestingo.testng; import org.testng.annotations.Test; public class CallOtherTestMethod { // A @Test method which is returning a value will be ignored by TestNG @Test public String returnMethod() { System.out.println("Returning Method"); return "SoftwareTestingo"; } @Test public void normalMethod() { System.out.println("Normal Method"); System.out.println(returnMethod()); } }
As we all know, TestNG is mainly used for unit testing, and a unit test method should not return a value. That is why when a method returns some value, that method is ignored by the testNG, which is the default behavior of TestNG.
But we can force TestNG to add those methods in the execution that return values by mentioning allow-return-values as true at the suite level.
Here is the testng.xml file:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Test"> <classes> <class name="com.softwaretestingo.testng.CallOtherTestMethod" /> </classes> </test> <!-- Test --> </suite> <!-- Suite -->
Output:
Normal Method Returning Method SoftwareTestingo PASSED: com.softwaretestingo.testng.CallOtherTestMethod.normalMethod =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 ===============================================
Note: We can force TestNG to change the behavior, but the result displays the return value.
Where can we use this concept?
TestNG is a testing framework that both developers and testers can use. This concept can be used when inheriting an interface or abstract class and testing its methods without changing method signatures.