Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用groovy对java类进行单元测试_Java_Unit Testing_Groovy - Fatal编程技术网

使用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解决问题的相当简单的例子。