java.lang.AssertionError:

tanzverfuehrung

Bekanntes Mitglied
ich habe einen Junit TEst geschrieben
Java:
/**
	 * 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)));
	}

Java:
/**
	 * 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
 
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).
 
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
 

Neue Themen


Zurück
Oben