Stellen Sie sich vor, ich habe folgende Klasse:Was ist das Analogon von Mockito.spy/doReturn in EasyMock?
public class TestClass {
public class Index<X> {
}
public class IndexData {
private final Index<?> index;
private final ReentrantReadWriteLock lock =
new ReentrantReadWriteLock();
public IndexData(final Index<?> index) {
super();
this.index = index;
}
public Index<?> getIndex() {
return index;
}
public Lock getReadLock() {
return lock.readLock();
}
public Lock getWriteLock() {
return lock.writeLock();
}
}
public void add(final InputClass input)
{
final IndexData index = getIndex(input);
final Lock lock = index.getWriteLock();
lock.lock();
try {
// Do something here, which requires synchronization
} finally {
lock.unlock();
}
}
protected IndexData getIndex(final InputClass input) {
// Some logic of getting the index for input
return null;
}
}
Ich möchte ein Unit-Test, der die
- im
add
Verfahren,index.getWriteLock()
verwendet wird (nichtindex.getReadLock()
), - die prüft schreiben Schloss ist genommen und
- freigegeben.
Mit Mockito ich einen Test wie folgt schreiben kann:
@Test
public void testAddUsesWriteLock() {
// Prepare
final TestClass objectUnderTest = Mockito.spy(new TestClass());
final InputClass input = Mockito.mock(InputClass.class);
final IndexData indexData = Mockito.mock(IndexData.class);
Mockito.doReturn(indexData).when(objectUnderTest).getIndex(input);
final Lock lock = Mockito.mock(Lock.class);
Mockito.doReturn(lock).when(indexData).getWriteLock();
// Invoke method under test
objectUnderTest.add(input);
// Verify
Mockito.verify(indexData).getWriteLock();
Mockito.verify(indexData, Mockito.never()).getReadLock();
Mockito.verify(lock).lock();
Mockito.verify(lock).unlock();
}
Wie kann ich die gleiche Sache mit EasyMock tun?
Beton: Wie kann ich die getIndex
Methode einen Schein in EasyMock (Zeile Mockito.doReturn(indexData).when(objectUnderTest).getIndex(input)
) zurückgeben?
Hinweis: Sie finden den Code dieses Beispiels here.
Entschuldigung, wenn Sie nur w und eine genaue Antwort zu Easymock, aber ich denke, du musst einen Schritt zurück machen und dich fragen, warum du die Klasse, die du zu testen versuchst (Spionage). Dies ist in der Regel ein Code-Geruch (http: //programmers.stackexchange).com/questions/212493/is-spying-on-getestete-Klasse-bad-Praxis). Ich dachte, es wäre erwähnenswert, wenn Sie neue Tests schreiben und den Code umgestalten können. – Brad
@Brad Ich weiß, dass diese Praxis als ein schlechtes Design angesehen werden kann. Für mich ist es jedoch wichtiger, alles zu testen, als ein elegantes Design zu haben. Grundsätzlich möchte ich einen automatisierten Test für die meisten Fehler, die ich manuell erkenne, schreiben können. In meiner speziellen Situation ist das einfach wichtiger als schönes Design. Und der Code kann nicht refaktoriert werden. –