試想,我有以下類:EasyMock中的Mockito.spy/doReturn的模擬器是什麼?
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;
}
}
我想要寫一個單元測試,這證實
-
在
- ,
index.getWriteLock()
被使用(不index.getReadLock()
), - 的取得鎖定併發布
- 。
add
方法
使用我的Mockito可以寫這樣一個測試:
@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();
}
我怎樣才能做到與EasyMock的同樣的事情?
具體:我如何才能在EasyMock中返回模擬getIndex
(行Mockito.doReturn(indexData).when(objectUnderTest).getIndex(input)
)?
注意:你可以找到這個例子的代碼here。
道歉,如果你只有w ant是與Easymock有關的確切答案,但我認爲你需要退後一步,問自己爲什麼你不得不「試探」你想要測試的課程。這通常是[認爲是代碼味道](http://programmers.stackexchange。COM /問題/ 212493/IS-偵察的測試類,壞的做法)。我認爲值得一提的是,如果您是新手撰寫這種性質的測試,並且可以選擇重構代碼。 – Brad 2015-02-13 09:40:52
@Brad我知道這種做法可能被認爲是糟糕的設計。然而,對我來說,測試我想要的所有東西比擁有優雅的設計更重要。基本上,我希望能夠爲我手動檢測的大多數錯誤編寫自動化測試。在我的特殊情況下,這比純粹的設計更重要。並且代碼不能被重構。 – 2015-02-13 09:51:09