0

I want to make a test suite using JUnit in which one Java class initialize the values and all the remaining JUnit test classes, get their values from that class.

I have made a class BaseTestclass.java in which values of class Stock.java has been initialized and I am using a JUnit test class TestClass1 in which I want to use values initialized by BaseTestClass.java. I am using a test suite AllClass.java to run both the classes.

Stock.java:

package com.practiseEasyMock.EasyMockPractise;

public class Stock {
  private String stockId;
  private String name;
  private Integer quantity;
  public String getStockId() {
    return this.stockId;
  }
  public void setStockId(final String stockId) {
    this.stockId = stockId;
  }
  public String getName() {
    return this.name;
  }
  public void setName(final String name) {
    this.name = name;
  }
  public Integer getQuantity() {
    return this.quantity;
  }
  public void setQuantity(final Integer quantity) {
    this.quantity = quantity;
  }
}

BaseTestClass.java:

package com.practiseEasyMock.EasyMockPractise;

import java.util.ArrayList;
import java.util.List;

public class BaseTestClass {
  private Stock googleStock, microsoftStock;
  private List<Stock> stocks;
  public void setCommonString() {
    this.googleStock = new Stock();
    this.googleStock.setName("Google");
    this.microsoftStock = new Stock();
    this.microsoftStock.setName("Microsoft");
    this.stocks = new ArrayList<Stock>();
    this.stocks.add(this.googleStock);
    this.stocks.add(this.microsoftStock);
  }
  public Stock getGoogleStock() {
    return this.googleStock;
  }
  public Stock getMicrosoftStock() {
    return this.microsoftStock;
  }
  public List<Stock> getStocks() {
    return this.stocks;
  }
}

TestClass1.java:

package com.practiseEasyMock.EasyMockPractise;

import org.easymock.EasyMockRunner;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(EasyMockRunner.class)
public class TestClass1 {
  private BaseTestClass baseTestClass;
  @Test
  public void testSuite1MarketValue() {
    this.baseTestClass = new BaseTestClass();
    this.baseTestClass.setCommonString();
    Assert.assertEquals("Google", this.baseTestClass.getGoogleStock().getName());
    Assert.assertEquals("Microsoft", this.baseTestClass.getMicrosoftStock().getName());
  }
}

Test Suite: AllTests.java

package com.practiseEasyMock.EasyMockPractise;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({BaseTestClass.class, TestSuite1.class})
public class AllTests {
}

So, now when I run the test suite i get the following error:

java.lang.Exception: No runnable methods
    at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
    at org.junit.runners.Suite.<init>(Suite.java:102)
    at org.junit.runners.Suite.<init>(Suite.java:70)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:107)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Please Help...

Stefan Birkner
  • 24,059
  • 12
  • 57
  • 72
r. singh
  • 1
  • 2
  • You don't have to include BaseTestClass in your suit classes, but just the test classes (TestSuite1 in this case) – Héctor Oct 27 '17 at 09:11

1 Answers1

0

BaseTestClass does not contain any tests. That is the reason for the error "No runnable methods". Remove BaseTestClass from the @SuiteClasses annotation of your suite.

Stefan Birkner
  • 24,059
  • 12
  • 57
  • 72