2016-12-08 5 views
1

Я пытаюсь написать Junit для моего приложения REST для загрузки Spring, но мой тест не работает с NoClassDefFoundError. Хотя, jar присутствует в pathpath. Я попробовал несколько различных аннотаций, но это еще не удается в одном местеNoClassDefFoundError on org.springframework.boot.test.mock.mockito.MockReset

Ниже приведены мои classs

Application.java

пакет com.test;

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.web.support.SpringBootServletInitializer; 

@SpringBootApplication 
public class Application extends SpringBootServletInitializer{ 

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

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
} 
} 

BusinessServiceController.java

package com.test; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.http.HttpStatus; 
import org.springframework.http.ResponseEntity; 
import org.springframework.web.bind.annotation.PostMapping; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
@RequestMapping("/business_services_WS") 
public class BusinessServiceController { 

Logger log = LoggerFactory.getLogger(BusinessServiceController.class); 

/** 
* 3.3.0 Request System Automation Limits [RSP-NSR] 
* @author eaggatu 
*/ 
@RequestMapping(value = "/number")  
@PostMapping 
public ResponseEntity<String> numberQueryResponse(@RequestBody String responseObj) { 
    log.info(responseObj); 
    return ResponseEntity.status(HttpStatus.OK).body("Number Search Query called"); 
} 
} 

Тест Класс

package com.test; 

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.autoconfigure.web.servlet.WebMvcTest; 
import org.springframework.http.MediaType; 
import org.springframework.test.context.junit4.SpringRunner; 
import org.springframework.test.web.servlet.MockMvc; 
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; 
import org.springframework.test.web.servlet.result.MockMvcResultMatchers; 
import org.springframework.web.context.WebApplicationContext; 

import com.test.BusinessServiceController; 

/*@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@SpringBootTest(classes={Application.class}) 
*/ 
@RunWith(SpringRunner.class) 
@WebMvcTest(controllers = BusinessServiceController.class) 
// @SpringBootTest(classes={Application.class}) 
@AutoConfigureMockMvc 
public class CallBackResponseSimulatorTest { 

@Autowired 
private WebApplicationContext context; 
@Autowired 
private MockMvc mvc; 
/* 
* @Before public void setup(){ mvc = 
* MockMvcBuilders.webAppContextSetup(context).build(); } 
*/ 

@Test 
public void callNumberSearchServiceSuccess() throws Exception { 
    this.mvc.perform(MockMvcRequestBuilders.post("/CallBackResponseSimulator/business_services_WS/number") 
      .contentType(MediaType.APPLICATION_JSON_UTF8).content("Hello! World")) 
      .andExpect(MockMvcResultMatchers.content().json("Number Search Query called")) 
      .andExpect(MockMvcResultMatchers.status().isOk()); 
} 
} 

Трассировка стека

java.lang.IllegalAccessError: tried to access method org.mockito.internal.util.MockUtil.<init>()V from class org.springframework.boot.test.mock.mockito.MockReset 
at org.springframework.boot.test.mock.mockito.MockReset.<clinit>(MockReset.java:56) 
at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:45) 
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:269) 
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
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) 

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.boot.test.mock.mockito.MockReset 
at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.afterTestMethod(ResetMocksTestExecutionListener.java:50) 
at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319) 
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94) 
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
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) 

build.gradle

 buildscript { 
     repositories { 
      mavenCentral() 
     } 
     dependencies { 
      classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE") 
     } 
    } 

    apply plugin: 'java' 
    apply plugin: 'eclipse' 
    apply plugin: 'idea' 
    apply plugin: 'spring-boot' 
    apply plugin: 'war' 

    jar { 
     baseName = 'gs-rest-service' 
     version = '0.1.0' 
    } 

    repositories { 
     mavenCentral() 
     jcenter() 
    } 

    sourceCompatibility = 1.8 
    targetCompatibility = 1.8 

    dependencies { 
     compile group: 'com.google.code.gson', name: 'gson', version: '2.7' 
     compile("org.springframework.boot:spring-boot-starter-web") 

     providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'  
     compile('org.springframework.boot:spring-boot-starter-test') 
     compile 'junit:junit:4.12' 
     compile group: 'org.mockito', name: 'mockito-core', version: '2.2.7' 
    } 
+0

Ранее испытание зависимости имели области видимость testCompile, я изменил его, чтобы найти обходной путь, но din't работы – Incredible

ответ

5

Удалить JUnit и зависимости Mockito весна-загрузка-стартер-тест обеспечит версию прав этих зависимостей.

весна-загрузки-стартер-тест будет добавить JUnit: 4,12 и Mockito: 2.2.29

+1

Эй! Благодаря Issam, я удалил зависимости Mockito и Junit и эта ошибка исчезла. Хотя тест не проходит. Но это еще одна проблема :) – Incredible

+0

Рад, что это помогло. Plz принимает ответ. Создайте новый SO и поделитесь им, если хотите, чтобы я помог исправить проблему с тестированием –

1

Другой вариант заключается в удалении выполнения теста слушатели тестового класса, аннотирования класс с @TestExecutionListeners. Как это:

@RunWith(SpringRunner::class) 
@SpringBootTest 
@ActiveProfiles("integration") 
@TestExecutionListeners() 
class MyIntegrationTest { 
... 
} 
Смежные вопросы