# JUnit und EasyMock



## SebiB90 (25. Jul 2008)

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:


```
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:

```
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


----------



## SebiB90 (27. Jul 2008)

weiß das denn keiner?
benutzt niemand EasyMock von euch? Was benutzt ihr denn stattdessen?


----------



## SebiB90 (31. Jul 2008)

Will mir keiner Antworten?
Kann mich nicht erinnern, dass ich jemals gar keine Antwort bekommen hab  :roll:


----------



## FArt (1. Aug 2008)

Folge mal dem Link in meiner Signatur.


----------



## SebiB90 (1. Aug 2008)

FArt hat gesagt.:
			
		

> Folge mal dem Link in meiner Signatur.


ahja :roll:

ok...google hät ich vllt nutzen solln -.- sorry...


----------



## FArt (1. Aug 2008)

Anstatt der ständig deinen Thread zu puschen und zu warten, dass andere für dich denken, hättest du mal Google anwerfen können: http://www.google.de/search?hl=de&q=IllegalStateException%3A+2+matchers+expected%2C+1+recorded&btnG=Google-Suche&meta=

Der erste Treffer...


----------



## SebiB90 (1. Aug 2008)

FArt hat gesagt.:
			
		

> Anstatt der ständig deinen Thread zu puschen und zu warten, dass andere für dich denken, hättest du mal Google anwerfen können: http://www.google.de/search?hl=de&q=IllegalStateException%3A+2+matchers+expected%2C+1+recorded&btnG=Google-Suche&meta=
> 
> Der erste Treffer...


nein, der erste Treffer ist es nicht.
Ich habe 2 Parameter und jeweils ein Matcher dafür. einmal eq() und einmal not().
Nur not() nimmt der komischerweise nicht an.


----------



## SebiB90 (1. Aug 2008)

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() )

```
expect(mockDao.loadByUsernameAndPassword(eq(userName), eq(passwordHash)))
```

Das aber irgendwie nicht ( 1 mal eq() und 1 mal not())

```
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.


----------

