JUnit und EasyMock

Status
Nicht offen für weitere Antworten.

SebiB90

Top Contributor
Hi,

ich probier grad bischen JUnit und EasyMock aus und hab dann mal ein Tutorial Code leicht verändert und dann funktioniert der nicht mehr. Nur ich verstehe nicht wieso. Die testRosyScenario() Methode funktioniert korrekt (ist aus dem Tutorial). Und die testBadScenario() habe ich selbst geschrieben. Da habe ich ein Matcher geändert: eq() durch not() ersetzt und da meckert er mir. Der Code:

Code:
package unitmock;

import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;

import java.security.MessageDigest;

import org.junit.Before;
import org.junit.Test;

public class LoginServiceTest {

	private LoginService service;
	private UserDAO mockDao;

	@Before
	public void setUp() {
		service = new LoginServiceImpl();
		mockDao = createStrictMock(UserDAO.class);
		service.setUserDAO(mockDao);
	}
                
	//Das funktioniert
	@Test
	public void testRosyScenario() throws Exception {
		User results = new User();
		String userName = "testUserName";
		String password = "testPassword";
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		md5.update(password.getBytes());
		String passwordHash = new String(md5.digest());

		expect(
				mockDao.loadByUsernameAndPassword(eq(userName),
						eq(passwordHash))).andReturn(results);

		replay(mockDao);
		assertTrue(service.login(userName, password));
		verify(mockDao);
	}
	//Das komischer weise nicht
	@Test
	public void testBadScenario() throws Exception {
		String userName = "testUserName";
		String password = "testPassword";
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		md5.update(password.getBytes());
		String passwordHash = new String(md5.digest());

		expect(
				mockDao.loadByUsernameAndPassword(eq(userName),
						not(passwordHash))).andReturn(null);

		replay(mockDao);
		assertFalse(service.login(userName, "wrongPassword"));
		verify(mockDao);
	}
}

Die Exception lautet:
Code:
java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
	at org.easymock.internal.ExpectedInvocation.createMissingMatchers(ExpectedInvocation.java:42)
	at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:34)
	at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:26)
	at org.easymock.internal.RecordState.invoke(RecordState.java:64)
	at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:24)
	at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:56)
	at $Proxy5.loadByUsernameAndPassword(Unknown Source)
	at unitmock.LoginServiceTest.testBadScenario(LoginServiceTest.java:60)
...

Wieso nimmt der not() nicht als Matcher an? Ich verstehs irgendwie nicht.

Mfg
SebiB90
 
Will mir keiner Antworten?
Kann mich nicht erinnern, dass ich jemals gar keine Antwort bekommen hab :roll:
 
Ich hab mal bischen bei google durchgeguckt, aber da ist meist das nur ein Matcher eingesetzt wird. Aber ich benutze 2 Matcher wie auch gefordert. Nur irgendwie nimmt der die nicht an.

Das hier funktioniert(mit 2 mal eq() )
Code:
 expect(mockDao.loadByUsernameAndPassword(eq(userName), eq(passwordHash)))

Das aber irgendwie nicht ( 1 mal eq() und 1 mal not())
Code:
expect(mockDao.loadByUsernameAndPassword(eq(userName), not(passwordHash)));
Ich habe hier also 2 Matcher, nur die Fehlermeldung gibt mir aus, das es nur 1 Matcher gibt.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben