使用groovy对java类进行单元测试
对于此代码段使用groovy对java类进行单元测试,java,unit-testing,groovy,Java,Unit Testing,Groovy,对于此代码段 @Component public class StorageResource { @Autowired private Storage storage; public String addItem(StorageItem item) { WrappedStorageItem wsi = new WrappedStorageItem(item); storage.add(wsi);
@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
,测试会是什么样子呢
它会不会变得不那么冗长?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)
).在这种情况下,很难说,但Groovy很可能会让它不那么冗长,但不会太多。对您来说,最大的好处是考虑尝试Spock,它真正利用Groovy使您的测试(或规范)更易于阅读和维护。如果您感兴趣,我可以写一个Spock示例。@ToddWCrone,是的。那会很有趣的。给我几天时间。同时,这里有一个使用Spock解决问题的相当简单的例子。