# java.lang.AssertionError:



## tanzverfuehrung (2. Dez 2011)

ich habe einen Junit TEst  geschrieben

```
/**
	 * Prüft, ob der Status eines Mitarbeiters mit einer bestimmten ID im
	 * SystemModel automatisch nach gewissen Sekunden auf
	 * {@link IStaff.State#NOT_AVAILABLE} gesetzt wird. Test mit nur einem
	 * {@link IStaff} Objekt.
	 * 
	 * @throws Exception
	 */
	@Test
	public void testUpdateSystemModelWithTimer() throws Exception {
		final IStaffMessage message = context.mock(IStaffMessage.class);

		// @formatter:off
		context.checking(new Expectations() {{
			oneOf(message).getId();
				will(returnValue("23"));
			oneOf(message).getState();
				will(returnValue(IStaff.State.ALARM));
			exactly(2).of(message).getCurrentPos();
				will(returnValue(new Position(9, 45)));
		}});// @formatter:on

		modelManager.setMinUpdateRate(milliSeconds(9));

		final ToggleCondition stateUpdatedCondition = new ToggleCondition();

		StaffCfg staffCfg = new StaffCfg();
		staffCfg.setId("23");
		Set<StaffCfg> cfgs = new HashSet<StaffCfg>();
		cfgs.add(staffCfg);
		MsecSystemModel model = new MsecSystemModel(cfgs);
		modelManager.setModel(model);
		modelManager.updateSystemModel(message);

		assertThat(stateUpdatedCondition, isSignaledWithin(milliSeconds(200)));
	}
```


```
/**
	 * Liefert einen Matcher der die angegebene Zeit auf eine Condition wartet.
	 * 
	 * @param duration
	 * @return
	 */
	public static Matcher<ToggleCondition> isSignaledWithin(final Duration duration) {
		return new AwaitToggleConditionMatcher(duration);
	}
```

der immer die fehlermeldung zurück liefert:
java.lang.AssertionError: 
Expected: is a signal after 200ms
     but: The condition was not signaled within 200ms! Condition :not signaled within the last 219ms
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
	at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
	at eu.gemtec.eagle.device.gemtec.msec.core.system.model.TestMsecModelManager.testUpdateSystemModelWithTimer(TestMsecModelManager.java:160)


in der zeile tritt der fehler auf 
		assertThat(stateUpdatedCondition, isSignaledWithin(milliSeconds(200)));




Es könnt ja auch sein , das mein test richtig ist und meine klasse falsch implementiert !?

kann mir jemand helfen?sehe da nicht durch???:L


----------



## tfa (2. Dez 2011)

Setz doch probeweise mal das Timeout hoch, um zu sehen, dass das Signal überhaupt kommt. Vielleicht sind die 200ms zu kurz. So ein Test ist sowieso kaum reproduzierbar (es sei denn, du nimmst RT Java).


----------



## bygones (2. Dez 2011)

werf den test so wie er ist weg und versuch nicht da was zu reparieren.

Timebasierende Tests, vor allem im millisecond bereich sind unzuverlaessig und nichts ausssagend.

wie du selbst siehst kann es eben mal sein, dass das signal mehr als 200 ms braucht.


ganz davon abgesehen dass das was du schreibst kein JUnit test ist sondern eher Integration/Systemtest


----------



## tfa (2. Dez 2011)

> ganz davon abgesehen dass das was du schreibst kein JUnit test ist sondern eher Integration/Systemtest


Es ist ein JUnit-Test, aber kein Unit-Test. Etwas verwirrend. Ein Grund mehr, TestNG zu nehmen


----------



## bygones (2. Dez 2011)

ach man... meinte ich doch


----------

