Java Spring Test

0

Witam, mam problem z testem JUnit w Frameworku Spring.
Przepisałem kod z książki, lecz wywala mi ciągle błąd. Czy ktoś mógłby zerknąć na to i podpowiedzieć co mogę zrobić?

Kod (test) :

 
package soundsystem;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
	
	@Autowired
	private CompactDisc cd;
	
	@Test
	public void cdShouldNotBeNull(){
		assertNotNull(cd);
	}
}

Kod (config):

package soundsystem;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan()
public class CDPlayerConfig {
}

Kod (interfejs):

package soundsystem;

public interface CompactDisc {
	void play();
}

Kod (przykładowa klasa):

package soundsystem;

import org.springframework.stereotype.Component;

@Component
public class Muse implements CompactDisc {
	private String artist = "Muse";
	private String song = "Supremacy";
	public void play() {
		System.out.println("Artist "+artist+" song "+ song);
	}
	
}

Wykorzystuje automatyczne wiązania JavaSpring.
Błąd, który mi wyskakuje to:

        java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:96)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	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: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)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 18 more

Dodaje w załączniku screen!!
Z góry dzięki za porady!!!!

2

Mi te testy z książki też nie wychodzą, brakuje czegoś zazwyczaj, czego autor nigdzie nie podał.
To są zrobione wszystkie ćwiczenia z książki: https://github.com/habuma/SpringInActionExamples
Podaje to jako referencje, a nie jako gotowe rozwiązanie ;)

1

Ogólnie w programowaniu staraj się czytać to, co jest w stacktrace. W javie jest sporo wyjątków i naprawdę są one w miarę zrozumiałe. Gdy jednak nic ci nie powie stacktrace, kopiuj ostatniego "cause'a" do googla i wejdź w pierwszy link, zazwyczaj ze StackOverflow:

http://stackoverflow.com/questions/1551697/getting-java-lang-classnotfoundexception-org-apache-commons-logging-logfactory

Brakuje ci klasy LogFactory. Jak projekt masz mavenowy, to dodaj sobei dependencję.

0

Pisz sobie sobie to w springboot'cie to nie powinno być problemów. Ja tak przynajmniej robiłem :P

0

@barslo: oczywiście, że można, ale czy powinno się? Kwestia podejścia. Nie ukrywam, jestem zwolennikiem rozwiązań prostych i skutecznych, ale to nie znaczy, że powinienem iść na skróty. Na tym polega proces uczenia się.
Natomiast książka jest pełna niespójności. Autor pokazuje kilka różnych wersji rozwiązania problemu (np. komunikacji z DB) i za każdym jednym razem zmienia założenia samego problemu. Tak się nie robi. Jestem przyzwyczajony do akademickich książek, gdzie jeden problem da się rozwiązać na kilka sposobów, bez zmiany założeń.
Nie chcę krytykować autora tej książki, bo dużo przedstawił, natomiast jest to książka dla osób, które już w Springu robiły, a nie dla początkujących. Z drugiej strony innej pozycji na razie nie ma, poza tutorialami, które zwykle ograniczają się do zrobienia MVC z jedną encją lub jednym widokiem.

Taki offtopic :)

0

Problem rozwiązany:) trzeba było zaimportować bibliotekę command-logging 1.2:) Dzięki za liczne odpowiedzi:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1