IDEA插件-----Squaretest(自动生成单元测试)

菜单栏就多了一项Squaretest
在这里插入图片描述
首先我们打开一个类,这个类就是我们即将要作为实验的类,这个类有7个public方法,因为Squaretest生成的单元测试方法都是只能生成public的,当然这也是合理的嘛!毕竟private的肯定被public调用了。
打开你的类,光标定位到代码里,右击鼠标选择Generate…
IDEA插件-----Squaretest(自动生成单元测试)_第1张图片
然后你就会看到这里有两个熟悉的图标,第一次的话选择第二个选项,它会让你选择你一下单元测试的模板
IDEA插件-----Squaretest(自动生成单元测试)_第2张图片
选择第二项后就会弹出一个框看下面这里它自动会识别出当前类需要Mock的成员变量,直接点ok
IDEA插件-----Squaretest(自动生成单元测试)_第3张图片
自动会使用类的真实目录层次在test文件夹中创建出来一个单元测试类,类名就是原类名后加Test
IDEA插件-----Squaretest(自动生成单元测试)_第4张图片
报错了呢,不要慌,这个断言是为了检查你单元测试跑出来的结果是否符合预期的,如果你不想检查只想完成覆盖率,直接干掉就可以了
IDEA插件-----Squaretest(自动生成单元测试)_第5张图片
如果你想修改单元测试的模板,可以在单元测试类中按快捷键,Alt+M,或者通过Squaretest的菜单倒数第二个
IDEA插件-----Squaretest(自动生成单元测试)_第6张图片
解决了上面一个问题之后,又发现另一个问题,这个工具VO,DTO,Entity,Command,Model这种实体类来讲,一般这种实体类我们都用lombok的注解get,set,还有constract构造器等注解,但是这个工具只能生成这些实体类的构造器的单元测试,无法生成get set方法的单元测试,所以写了个base方法,实体类继承一下,简单的写两行带就好了,看下面代码:

@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public abstract class BaseVoEntityTest<T> {
    protected abstract T getT();

    private void testGetAndSet() throws IllegalAccessException, InstantiationException, IntrospectionException,
            InvocationTargetException {
        T t = getT();
        Class modelClass = t.getClass();
        Object obj = modelClass.newInstance();
        Field[] fields = modelClass.getDeclaredFields();
        for (Field f : fields) {
            boolean isStatic = Modifier.isStatic(f.getModifiers());
            // 过滤字段
            if (f.getName().equals("isSerialVersionUID") || f.getName().equals("serialVersionUID") || isStatic || f.getGenericType().toString().equals("boolean")
                    || f.isSynthetic()) {
                continue;
            }
            PropertyDescriptor pd = new PropertyDescriptor(f.getName(), modelClass);
            Method get = pd.getReadMethod();
            Method set = pd.getWriteMethod();
            set.invoke(obj, get.invoke(obj));
        }
    }

    @Test
    public void getAndSetTest() throws InvocationTargetException, IntrospectionException,
            InstantiationException, IllegalAccessException {
        this.testGetAndSet();
    }

}

同样的方式我们在实体类上通过Squaretest生成单元测试,然后继承我上面写的那个base类,vo的单元测试代码稍加改动,如下
IDEA插件-----Squaretest(自动生成单元测试)_第7张图片

你可能感兴趣的:(IDEA插件,单元测试,intellij-idea,junit)