使用groovy对java类进行单元测试

时间:2016-02-01 13:51:01

标签: 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);
            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,测试会怎样?

它会不那么冗长吗?

1 个答案:

答案 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))。

相关问题