java - 自动为 Junit 创建数据

标签 java junit automation mocking

我有一个方法,它采用域对象(一个非常复杂的嵌套对象树)作为参数,执行一些操作并返回结果。我需要为此方法创建 junit 测试,我需要将数据设置到复杂对象中。我想自动化为我的 junit 测试创建模拟数据的过程。我想要:在我的方法中调用的复杂对象树的那些对象/基元应该自动识别(通过分析代码)或其他)并应调用这些字段的 setter 。 如有任何帮助,我们将不胜感激。

最佳答案

我没试过PODAM (POjo Data Mocker),但它是一个“用虚构数据自动填充 pojo”的工具。

Pojo pojo = new PodamFactoryImpl().manufacturePojo(Pojo.class);

您可以检查一下 - 它似乎是可配置的,并且默认同时使用构造函数参数和 setter 。

如果您想尝试自己的/创建自己的测试实用程序,您可以按照这些思路做一些事情(-我承认“set”上的字符串检查有点难看:它可能是一种不是的方法setter。逻辑可以扩展:下一个字符是大写吗?它与字段名称匹配吗?)

public void populateObjectWithRandomValuesUsingReflection(Object object) {
    List<Object> argsList;
    for (Method method : object.getClass().getMethods()){
        argsList = new ArrayList();
        if (resemblesASetterMethod(method)){
            for (Class<?> parameterClass : method.getParameterTypes()){
                if (parameterClass.isPrimitive()){
                    argsList.add(getRandomValueOfPrimitive(parameterClass));
                } else {
                    throw new UnsupportedOperationException("This jUnit test utility does not yet support non-primitive types.");
                }
            }
            invokeMethod(method, object, argsList.toArray());
        }
    }
}

private void invokeMethod(Method method, Object object, Object[] args) {
    try {
        method.invoke(object, args);
    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
        Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private boolean resemblesASetterMethod(Method method){
    return method.getName().startsWith("set");
}

上面的示例仅支持基元,但同样,您可以扩展此示例代码。

为了创建(伪)随机值,有框架,fx:

  • org.apache.commons.lang.RandomStringUtils
  • java.util.Random

关于java - 自动为 Junit 创建数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195486/

相关文章:

java - Eclipse 帮助中的 Postgres JDBC 连接

java - 在特定时间运行Java程序

java - 断言与 JUnit 断言

python - 云管理或基础设施管理中的自动化语言

javascript - 单击 Protractor 中的表格单元格值

java - 使用 Array[i] 逻辑进行格式化

java - 如何在不依赖数据库的情况下将 JUnit 测试应用于 Insert()、update()、delete() 方法(使用 Mockito)

java - 启动eclipse平台进行junit测试时出现异常

javascript - Cypress> 在对象数组中查找文本> 无法定位文本 :TypeError: $e1. find.contains 不是函数

java - 构建 EntityManagerFactory 后如何获取 Hibernate 配置?