1

Should we make seprate test folder or test folder under src?

My test class location is: server/test/com/cellpointmombile/mconsole/manualtrigger/ManualTriggerControllerTest.java

And I am writing Junit for class ManualTriggerController, and its path is :server/src/main/java/com/cellpointmobile/mconsole/controller/ManualTriggerController.java

My main class, i.e Application.java is in below location: server/src/main/java/com/cellpointmobile/mconsole/app/Application.java

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
    at org.springframework.util.Assert.state(Assert.java:70)
    at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.getOrFindConfigurationClasses(SpringBootTestContextBootstrapper.java:202)
    at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.processMergedContextConfiguration(SpringBootTestContextBootstrapper.java:137)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:409)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration(AbstractTestContextBootstrapper.java:323)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:277)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:112)
    at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext(SpringBootTestContextBootstrapper.java:82)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:143)
    at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
    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:104)
    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:87)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

Can you please tell what am I doing wrong?

GhostCat
  • 137,827
  • 25
  • 176
  • 248
  • Welcome to Stack Overflow! Other users marked your question for low quality and need for improvement. I re-worded/formatted your input to make it easier to read/understand. Please review my changes to ensure they reflect your intentions. But I think your question is still not answerable. **You** should [edit] your question now, to add missing details (see [mcve] ). Feel free to drop me a comment in case you have further questions or feedback for me. – GhostCat Oct 24 '18 at 06:57
  • The information where *some* of your classes sit doesn't help here much. It could also be some *content* of your test code. My suggestion: don't try to do such things "trial and error". Go, read and practice using a tutorial that gives you **all** required steps to unit test a spring boot app. Understand how these things work, and *then* try to use them in your own project. – GhostCat Oct 24 '18 at 06:59

2 Answers2

1

Follow the packages have used, test is running successfully.

Inside src/main/java

package com.an.csv.mvc;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController("/myclass")
public class TestControllerEx {

 @GetMapping
  public ResponseEntity control(){
    return new ResponseEntity("success",HttpStatus.OK);
  }
}

Spring Boot main class:

package com.an.csv;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class})
public class CSVBatchApplication {

  public static void main(String[] args) {
    SpringApplication.run(CSVBatchApplication.class, args);
  }
}

Under src/test/java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import com.an.csv.CSVBatchApplication;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CSVBatchApplication.class)
@AutoConfigureMockMvc
public class ControllerIntegrationTest {

  @Autowired private MockMvc mockMvc;

  @Test
  public void testController() throws Exception {
    mockMvc
        .perform(get("/myclass"))
        .andExpect(status().isOk());
  }
}
Molay
  • 1,154
  • 2
  • 19
  • 42
  • Tried it, but facing below issue : {Caught exception while allowing TestExecutionListener [org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@25af5db5] to prepare test instance [com.cellpointmobile.promotion.test.PromotionTest@14bae047] - @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory' (OnClassCondition)} – Apeksha Saxena Oct 24 '18 at 10:43
0

As you say, My test class location is : server/test/com/cellpointmombile/mconsole/manualtrigger/ManualTriggerControllerTest.java

it should be, server/src/test/com/cellpointmombile/mconsole/manualtrigger/ManualTriggerControllerTest.java

Also make sure your test class ManualTriggerControllerTest has been annoted with @SpringBootTest or you can also use @ContextConfiguration but @SpringBootTest is simpler because you need not worry about anything else as it takes care of context loading, configuration for your tests to run.

Your ManualTriggerControllerTest should look like below,

@RunWith(SpringRunner.class)
@SpringBootTest
public class ManualTriggerControllerTest{
/* your code */
}

I hope this helps !

rdj7
  • 1,905
  • 4
  • 18
  • 33