I have a test suite class:
@RunWith(Suite.class) @Suite.SuiteClasses({ GameMasterTest.class, PlayerTest.class, }) public class BananaTestSuite {
What annotation do I need to use to make a function in this class run before any of the classes containing actual tests? Right now, I'm doing this, and it works, but it's not as readable as it could be:
static { try { submitPeelAction = new Player(new GameMaster(1)).getClass().getDeclaredMethod("submitPeelAction"); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } submitPeelAction.setAccessible(true); }
I tried @BeforeClass
but it didn't work.
It is possible to run a method only once for the entire test class before any of the tests are executed, and prior to any @Before method(s). “Once only setup” are useful for starting servers, opening communications, etc. It's time-consuming to close and re-open resources for each test.
Make a super test class containing the method annotated with @BeforeClass. Extend all the test classes from this class, eg,
@Ignore public class BaseTest { @BeforeClass public static void setUpBaseClass() { //Do the necessary setup here } }
This method will run before any @BeforeClass annotated method in the subclasses: Source. Ensure that this method name is not used in any subclass to prevent shadowing.
If you need to run this just once (eg, if you are creating/initializing a large resource for all tests to use), set a flag in the super class to check whether the method ran or not.
This design will also ensure that if you change the test runner, you need not change anything else.
Use @Before for setUp() and @After for tearDown methods.
EDIT: after some tests here I found that @Before and @After does not work for Test Suite. In your case you should use @BeforeClass and a static method to encapsulate your initialization code.
@RunWith(Suite.class) @SuiteClasses( { ContactTest.class }) public class AllTests { @BeforeClass public static void init() { System.out.println("Before all"); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With