I have a test class with two methods annotated as @Test.
If i run each methods individually by commenting the other, it succeeds. But if run both together, it fails. What could be the reason?
public class ProductAvailTest {
private static final String PRODUCT_AVAIL_BUILDER = "ProductAvailBuilder";
@Test
public void productAvailResponseDateRequired() throws Exception {
ResponseBuilderFactory responseBuilderFactory = ResponseBuilderFactory.createResponseBuilderFactory();
ResponseBuilder responseBuilder = responseBuilderFactory.createResponseBuilder(PRODUCT_AVAIL_BUILDER);
ProductAvailDateRqdHelper productAvailDateRqdHelper = new ProductAvailDateRqdHelper();
List<Rsproducts> products = productAvailDateRqdHelper.getLOMProducts();
// TODO change this to logger
System.out.println("No. of products in test " + products.size());
GetProductAvailOutput actualProductAvailOutput = (GetProductAvailOutput) responseBuilder.buildSuccessResponse(
products, productAvailDateRqdHelper.getProductAvailInput());
GetProductAvailOutput expectedProductAvailOutput = productAvailDateRqdHelper.getProductAvailOutput();
// TODO change this to logger
System.out.println("Size in expected " + expectedProductAvailOutput.getProductBrand().size());
System.out.println("Size in actual " + actualProductAvailOutput.getProductBrand().size());
Assert.assertEquals(expectedProductAvailOutput, actualProductAvailOutput);
}
@Test
public void productAvailResponseInvBased() throws Exception {
ResponseBuilderFactory responseBuilderFactory = ResponseBuilderFactory.createResponseBuilderFactory();
ResponseBuilder responseBuilder = responseBuilderFactory.createResponseBuilder(PRODUCT_AVAIL_BUILDER);
ProductAvailInvHelper productAvailInvHelper = new ProductAvailInvHelper();
List<Rsproducts> products = productAvailInvHelper.getLOMProducts();
// TODO change this to logger
System.out.println("No. of products in test " + products.size());
System.out.println("No of inventory " + products.get(0).getRsproddtls().size());
GetProductAvailOutput actualProductAvailOutput = (GetProductAvailOutput) responseBuilder.buildSuccessResponse(
products, productAvailInvHelper.getProductAvailInput());
GetProductAvailOutput expectedProductAvailOutput = productAvailInvHelper.getProductAvailOutput();
// TODO change this to logger
System.out.println("Size in expected " + expectedProductAvailOutput.getProductBrand().size());
System.out.println("Size in actual " + actualProductAvailOutput.getProductBrand().size());
Assert.assertEquals(expectedProductAvailOutput, actualProductAvailOutput);
}
@Test
public void productAvailResponseFreeSell() throws Exception {
ResponseBuilderFactory responseBuilderFactory = ResponseBuilderFactory.createResponseBuilderFactory();
ResponseBuilder responseBuilder = responseBuilderFactory.createResponseBuilder(PRODUCT_AVAIL_BUILDER);
ProductAvailFreeSellHelper productAvailFreeSellHelper = new ProductAvailFreeSellHelper();
List<Rsproducts> products = productAvailFreeSellHelper.getLOMProducts();
// TODO change this to logger
System.out.println("No. of products in test " + products.size());
GetProductAvailOutput actualProductAvailOutput = (GetProductAvailOutput) responseBuilder.buildSuccessResponse(
products, productAvailFreeSellHelper.getProductAvailInput());
GetProductAvailOutput expectedProductAvailOutput = productAvailFreeSellHelper.getProductAvailOutput();
// TODO change this to logger
System.out.println("Size in expected " + expectedProductAvailOutput.getProductBrand().size());
System.out.println("Size in actual " + actualProductAvailOutput.getProductBrand().size());
Assert.assertEquals(expectedProductAvailOutput, actualProductAvailOutput);
}
}
I would hazard a guess that the test methods are not setting up their environment independently. So the first test within a given
javainvocation works, but leaves the environment in a different state that’s not suitable for the next test run.If you’re setting up important state within static initialiser blocks, or possibly within the constructor of the test, you may fall foul of this. Important state should be initialised either as local variables within the test method, or via methods annotated with
@Before.You should expand on what “it fails” means – is it the second of the two tests that fails by any chance, while the first to run succeeds?