对于此代码段
@Component
public class StorageResource {
@Autowired
private Storage storage;
public String addItem(StorageItem item) {
WrappedStorageItem wsi = new WrappedStorageItem(item);
storage.add(wsi);
return wsi.getId();
}
}
单元测试看起来像这样
@Test
void testCase() {
StorageResource storageResource = new StorageResource();
Storage storageMock = createMock(Storage.class);
Whitebox.setInternalState(storageResource, Storage.class, storage);
StorageItem item = new StorageItem();
WrappedStorageItem wos = new WrappedStorageItem(item);
expectNew(WrappedStorageItem.class, item).andReturn(wos);
storageMock.add(wos);
expectLastCall();
replayAll();
storageResource.addItem(item);
verifyAll();
}
但是如果我使用groovy
,测试会怎样?
它会不那么冗长吗?
答案 0 :(得分:2)
Groovy可以使测试更简洁。多少取决于您的代码的结构以及您正在使用的测试库和框架。
作为一个例子,Groovy为对象模拟提供了出色的支持,可以用来编写你的测试:
def mock = new MockFor(Storage)
mock.demand.add { item -> assert item instanceof WrappedStorageItem }
mock.use {
StorageResource storageResource = new StorageResource(storage: new Storage())
storageResource.addItem(new StorageItem())
// verify is implicit
}
此外,在Groovy中设置测试装置通常要简单得多,因为您可以利用内置列表和映射语法(例如[1, 2, 3]
而不是x = new ArrayList(); x.add(1); x.add(2); x.add(3)
)。