Testowanie wstrzykiwania.

0

Dobry wieczór,

uczę się Sprina z książki pt. "SPRING W AKCJI. WYDANIE IV". Doszedłem do rozdziału drugiego, w którym m.in. przeprowadzane są testy wstrzykiwania zależności.
Niestety nie do końca rozumiem dlaczego dostaję błąd. Sprawa wygląda następująco, Intellij IDEA podpowiada mi, że mój obiekt jest przestarzały, jeśli dobrze to zrozumiałem. Dokładnie chodzi mi tu o:StandardOutputStreamLog Tworzę taki obiekt i później wykorzystuję log do assercji. Test nie przebiega pomyślnie mimo iż Intellij twierdzi, że oba teksty są jednakowe. Dokładnie klasa testowa wygląda tak:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerConfigTest {

    @Rule
    public final StandardOutputStreamLog log = new StandardOutputStreamLog();

    @Autowired
    private MediaPlayer player;

    @Autowired
    private CompactDisc cd;

    @Test
    public void cdShouldNotBeNull(){
        assertNotNull(cd);
    }

    @Test
    public void playTest(){
        player.play();
        assertEquals("Odtwarzam utwór Stg. Pepper's Lonely Hearts Club Band" + " artysty The Beatles\n", log.getLog());
    }
}

Oraz błąd, nie do końca rozumiem co tu jest błedem ale wskazana jest linia z assercją więc przypuszczam, że coś jest nie tak z tym logiem.

Odtwarzam utwór Stg. Pepper's Lonely Hearts Club Band artysty The Beatles

org.junit.ComparisonFailure: 
Expected :Odtwarzam utwór Stg. Pepper's Lonely Hearts Club Band artysty The Beatles

Actual   :Odtwarzam utwór Stg. Pepper's Lonely Hearts Club Band artysty The Beatles

 <Click to see difference>


	at org.junit.Assert.assertEquals(Assert.java:115)
	at org.junit.Assert.assertEquals(Assert.java:144)
	at rozdział_2.CDPlayerConfigTest.playTest(CDPlayerConfigTest.java:39)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.junit.contrib.java.lang.system.internal.LogPrintStream$1$1.evaluate(LogPrintStream.java:30)
	at org.junit.contrib.java.lang.system.internal.PrintStreamHandler$3.evaluate(PrintStreamHandler.java:48)
	at org.junit.contrib.java.lang.system.internal.LogPrintStream$1.evaluate(LogPrintStream.java:26)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	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.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Komunikatów INFO nie kopiowałem, ale one chyba nie mają znaczenia.

0

No przecież jasno ci napisało ze asercja wykryła różnicę w stringach między oczekiwanym a tym co się pojawiło. Stawiałbym na jakiś znak końca linii albo coś w tym stylu.

0

7d4fe9f954.png

1

No i widze że po jednej stronie znakiem końca linii jest LF a po drugiej CR. Co zresztą też wyżej napisałem. Najlepiej zrób trim() na tym stringu z loggera a sam w swoim nie dodawaj tego znaku końca linii.

0

okej nie ogarnąłem tego, przeczytałem tylko, że są identyczne.

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